All of lore.kernel.org
 help / color / mirror / Atom feed
From: Ralf Baechle <ralf@oss.sgi.com>
To: Phil Thompson <Phil.Thompson@pace.co.uk>
Cc: "'linux-mips@oss.sgi.com'" <linux-mips@oss.sgi.com>
Subject: Re: Moving from old-irq.c
Date: Fri, 13 Jul 2001 01:30:54 +0200	[thread overview]
Message-ID: <20010713013054.A24695@bacchus.dhis.org> (raw)
In-Reply-To: <54045BFDAD47D5118A850002A5095CC30AC548@exchange1.cam.pace.co.uk>; from Phil.Thompson@pace.co.uk on Wed, Jul 11, 2001 at 01:16:56PM +0100

On Wed, Jul 11, 2001 at 01:16:56PM +0100, Phil Thompson wrote:

> Is there any documentation around that describes how to move from interrupt
> code based on old-irq.c to the new code? Or any other hints or suggestions.

First disable CONFIG_ROTTEN_IRQ if you were using that and enable
CONFIG_NEW_IRQ.  You'll probably have to hack arch/mips/config.in to do
that.

Next you have to rewrite your systems irq code.  You'll have to provide
an init_IRQ() function to initialize the interrupt system.  As the
absolute minimum it'll have to do something like:

        set_except_vector(0, myasmirqhandler);
        init_generic_irq();

and initialize the entries for all interrupts used by your system in the
irq_desc array like:

        for (i = 0; i < NUM_MY_INTS; i++) {

                irq_desc[i].status      = IRQ_DISABLED;
                irq_desc[i].action      = 0;
                irq_desc[i].depth       = 1;
                irq_desc[i].handler     = handler;
        }

where handler is a pointer to struct like this one:

static struct hw_interrupt_type ip22_my_irq_type = {
        "My interrupt controller",
        startup_my_irq,
        shutdown_my_irq,
        enable_my_irq,
        disable_my_irq,
        mask_and_ack_my_irq,
        end_my_irq,
        NULL
};

All that's left now is to write the function references in above struct
initialization:

static void enable_my_irq(unsigned int irq)
{
	/* enable the interrupt in the controller  */
}

static unsigned int startup_my_irq(unsigned int irq)
{
        enable_my_irq(irq);

        return 0;               /* Never anything pending  */
}

static void disable_my_irq(unsigned int irq)
{
	/* Disable function in the interrupt controller  */
}

static void shutdown_my_irq(unsigned int irq)
{
	/*
	 * Disable interrupt in the interrupt controller.  Often this function
	 * is identical to disable_my_irq.
	 */
}

static void mask_and_ack_my_irq(unsigned int irq)
{
	/*
	 * Mask and acknowledge interrupt.  Often this function is identical
	 * to disable_my_irq.  Exception is for example the i8259 PICs.
	 */
}

static void end_my_irq (unsigned int irq)
{
        if (!(irq_desc[irq].status & (IRQ_DISABLED|IRQ_INPROGRESS)))
                enable_my_irq(irq);
}

Take a look at arch/mips/sgi/indy_int.c but there are more examples.

The plan is to nuke old-irq.c early in 2.5; at the same time also something
like arch/{i386,mips}/kernel/irq.c will become kernel/irq.c.

  Ralf

  reply	other threads:[~2001-07-12 23:31 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2001-07-11 12:16 Moving from old-irq.c Phil Thompson
2001-07-12 23:30 ` Ralf Baechle [this message]
2001-07-12 23:55   ` Jun Sun
2001-07-13  0:41     ` Ralf Baechle
2001-07-13  1:04       ` Jun Sun

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20010713013054.A24695@bacchus.dhis.org \
    --to=ralf@oss.sgi.com \
    --cc=Phil.Thompson@pace.co.uk \
    --cc=linux-mips@oss.sgi.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.