Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 8f312ecf authored by Lennert Buytenhek's avatar Lennert Buytenhek Committed by Benjamin Herrenschmidt
Browse files

powerpc: platforms/iseries irq_data conversion.

parent 0bf8878e
Loading
Loading
Loading
Loading
+24 −19
Original line number Diff line number Diff line
@@ -167,11 +167,11 @@ static void pci_event_handler(struct HvLpEvent *event)
 * This will be called by device drivers (via enable_IRQ)
 * to enable INTA in the bridge interrupt status register.
 */
static void iseries_enable_IRQ(unsigned int irq)
static void iseries_enable_IRQ(struct irq_data *d)
{
	u32 bus, dev_id, function, mask;
	const u32 sub_bus = 0;
	unsigned int rirq = (unsigned int)irq_map[irq].hwirq;
	unsigned int rirq = (unsigned int)irq_map[d->irq].hwirq;

	/* The IRQ has already been locked by the caller */
	bus = REAL_IRQ_TO_BUS(rirq);
@@ -184,23 +184,23 @@ static void iseries_enable_IRQ(unsigned int irq)
}

/* This is called by iseries_activate_IRQs */
static unsigned int iseries_startup_IRQ(unsigned int irq)
static unsigned int iseries_startup_IRQ(struct irq_data *d)
{
	u32 bus, dev_id, function, mask;
	const u32 sub_bus = 0;
	unsigned int rirq = (unsigned int)irq_map[irq].hwirq;
	unsigned int rirq = (unsigned int)irq_map[d->irq].hwirq;

	bus = REAL_IRQ_TO_BUS(rirq);
	function = REAL_IRQ_TO_FUNC(rirq);
	dev_id = (REAL_IRQ_TO_IDSEL(rirq) << 4) + function;

	/* Link the IRQ number to the bridge */
	HvCallXm_connectBusUnit(bus, sub_bus, dev_id, irq);
	HvCallXm_connectBusUnit(bus, sub_bus, dev_id, d->irq);

	/* Unmask bridge interrupts in the FISR */
	mask = 0x01010000 << function;
	HvCallPci_unmaskFisr(bus, sub_bus, dev_id, mask);
	iseries_enable_IRQ(irq);
	iseries_enable_IRQ(d);
	return 0;
}

@@ -215,21 +215,26 @@ void __init iSeries_activate_IRQs()

	for_each_irq (irq) {
		struct irq_desc *desc = irq_to_desc(irq);
		struct irq_chip *chip;

		if (desc && desc->chip && desc->chip->startup) {
		if (!desc)
			continue;

		chip = get_irq_desc_chip(desc);
		if (chip && chip->irq_startup) {
			raw_spin_lock_irqsave(&desc->lock, flags);
			desc->chip->startup(irq);
			chip->irq_startup(&desc->irq_data);
			raw_spin_unlock_irqrestore(&desc->lock, flags);
		}
	}
}

/*  this is not called anywhere currently */
static void iseries_shutdown_IRQ(unsigned int irq)
static void iseries_shutdown_IRQ(struct irq_data *d)
{
	u32 bus, dev_id, function, mask;
	const u32 sub_bus = 0;
	unsigned int rirq = (unsigned int)irq_map[irq].hwirq;
	unsigned int rirq = (unsigned int)irq_map[d->irq].hwirq;

	/* irq should be locked by the caller */
	bus = REAL_IRQ_TO_BUS(rirq);
@@ -248,11 +253,11 @@ static void iseries_shutdown_IRQ(unsigned int irq)
 * This will be called by device drivers (via disable_IRQ)
 * to disable INTA in the bridge interrupt status register.
 */
static void iseries_disable_IRQ(unsigned int irq)
static void iseries_disable_IRQ(struct irq_data *d)
{
	u32 bus, dev_id, function, mask;
	const u32 sub_bus = 0;
	unsigned int rirq = (unsigned int)irq_map[irq].hwirq;
	unsigned int rirq = (unsigned int)irq_map[d->irq].hwirq;

	/* The IRQ has already been locked by the caller */
	bus = REAL_IRQ_TO_BUS(rirq);
@@ -264,9 +269,9 @@ static void iseries_disable_IRQ(unsigned int irq)
	HvCallPci_maskInterrupts(bus, sub_bus, dev_id, mask);
}

static void iseries_end_IRQ(unsigned int irq)
static void iseries_end_IRQ(struct irq_data *d)
{
	unsigned int rirq = (unsigned int)irq_map[irq].hwirq;
	unsigned int rirq = (unsigned int)irq_map[d->irq].hwirq;

	HvCallPci_eoi(REAL_IRQ_TO_BUS(rirq), REAL_IRQ_TO_SUBBUS(rirq),
		(REAL_IRQ_TO_IDSEL(rirq) << 4) + REAL_IRQ_TO_FUNC(rirq));
@@ -274,11 +279,11 @@ static void iseries_end_IRQ(unsigned int irq)

static struct irq_chip iseries_pic = {
	.name		= "iSeries",
	.startup	= iseries_startup_IRQ,
	.shutdown	= iseries_shutdown_IRQ,
	.unmask		= iseries_enable_IRQ,
	.mask		= iseries_disable_IRQ,
	.eoi		= iseries_end_IRQ
	.irq_startup	= iseries_startup_IRQ,
	.irq_shutdown	= iseries_shutdown_IRQ,
	.irq_unmask	= iseries_enable_IRQ,
	.irq_mask	= iseries_disable_IRQ,
	.irq_eoi	= iseries_end_IRQ
};

/*