public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* Re: How kernel handle interrupts[AX88796B network controller]
       [not found]   ` <20121221153451.GB5530@zuhnb712>
@ 2012-12-21 21:33     ` anish kumar
  2012-12-22 15:11       ` Woody Wu
  2012-12-24 14:10       ` Woody Wu
  0 siblings, 2 replies; 7+ messages in thread
From: anish kumar @ 2012-12-21 21:33 UTC (permalink / raw)
  To: Woody Wu; +Cc: kernelnewbies, linux-kernel

On Fri, 2012-12-21 at 23:34 +0800, Woody Wu wrote:
> On Thu, Dec 20, 2012 at 10:05:05AM -0800, anish singh wrote:
> > On Dec 20, 2012 6:30 AM, "Woody Wu" <narkewoody@gmail.com> wrote:
> > >
> > > Hi, List
> > >
> > > Where is the Kernel code that handles external interrupts? I want to
> > > have a look at it but haven't found out where it is.
> > >
> > > Actually, I have some basic questions about interrupt handling in Linux.
> > > 1. After Kernel's ISR received an interrupt, I believe it will invoke a
> > >    handler defined in a device driver if any. But it should be the
> > >    device driver's responsibility or kernel ISR's responsibility to
> > >    clear (or acknowledge) the interrupt?
> > If the interrupt in question is currently being handled then in
> > the case of edge triggered interrupt we just mask the interrupt,set it
> > pending and bail out.Once the interrupt handler completes then we check for
> > pending interrupt and handle it.In level triggered we don't do that.
> > Kerenel ISR -this is mixture of core kernel interrupt handling code + your
> > device driver interrupt handler(if this is chip driver which is supposed to
> > get one interrupt and is reponsible for calling other interrupt handlers
> > based on the chip register status then you do explicit masking unmasking
> > yourself).
> > If you device driver is a interrupt controller driver then you register
> > your driver with kernel interrupt handling code and need to write some
> > callbacks such as .mask,.unmask and so on.This callbacks are called at
> > appropiate places whenever the interrupt is raised.This interrupt is then
> > passed to drivers who has requested for this interrupt by calling
> > request_irq.
> > >
> > > 2. My device, an AX88796B network controller, asserting the interrupt
> > >    line in a level-triggered manner. Now I met problem with the device
> > that
> > >    might caused by the CPU interrupt mode is not set as level-triggered by
> > >    edge trigger.  My CPU is Samsung S3C2410, an ARM920T powered one.  Does
> > >    anyone know usually where and how should I do this kind of setting?
> > Just pass the parameter "level triggered" in request_irq in your device
> > driver.
> 
> Hi Sign,
> 
> I searched the interrupt.h for the all the defined flags that I can pass
> to the request_irq, but there is no a flag looks like "level triggered".
> Would you tell me what you mean the parameter "level triggered"?
irq_set_irq_type(info->irq, IRQ_TYPE_LEVEL_LOW)

include/linux/irq.h
IRQ_TYPE_LEVEL_HIGH          - high level triggered
IRQ_TYPE_LEVEL_LOW           - low level triggered
> 
> Thanks.
> 
> > >
> > >
> > > Thanks in advance.
> > >
> > > --
> > > woody
> > > I can't go back to yesterday - because I was a different person then.
> > >
> > > _______________________________________________
> > > Kernelnewbies mailing list
> > > Kernelnewbies@kernelnewbies.org
> > > http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies
> 



^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: How kernel handle interrupts[AX88796B network controller]
  2012-12-21 21:33     ` How kernel handle interrupts[AX88796B network controller] anish kumar
@ 2012-12-22 15:11       ` Woody Wu
  2013-01-07 16:36         ` anish kumar
  2012-12-24 14:10       ` Woody Wu
  1 sibling, 1 reply; 7+ messages in thread
From: Woody Wu @ 2012-12-22 15:11 UTC (permalink / raw)
  To: anish kumar; +Cc: kernelnewbies, linux-kernel

On Fri, Dec 21, 2012 at 01:33:03PM -0800, anish kumar wrote:
> On Fri, 2012-12-21 at 23:34 +0800, Woody Wu wrote:
> > On Thu, Dec 20, 2012 at 10:05:05AM -0800, anish singh wrote:
> > > On Dec 20, 2012 6:30 AM, "Woody Wu" <narkewoody@gmail.com> wrote:
> > > >
> > > > Hi, List
> > > >
> > > > Where is the Kernel code that handles external interrupts? I want to
> > > > have a look at it but haven't found out where it is.
> > > >
> > > > Actually, I have some basic questions about interrupt handling in Linux.
> > > > 1. After Kernel's ISR received an interrupt, I believe it will invoke a
> > > >    handler defined in a device driver if any. But it should be the
> > > >    device driver's responsibility or kernel ISR's responsibility to
> > > >    clear (or acknowledge) the interrupt?
> > > If the interrupt in question is currently being handled then in
> > > the case of edge triggered interrupt we just mask the interrupt,set it
> > > pending and bail out.Once the interrupt handler completes then we check for
> > > pending interrupt and handle it.In level triggered we don't do that.
> > > Kerenel ISR -this is mixture of core kernel interrupt handling code + your
> > > device driver interrupt handler(if this is chip driver which is supposed to
> > > get one interrupt and is reponsible for calling other interrupt handlers
> > > based on the chip register status then you do explicit masking unmasking
> > > yourself).
> > > If you device driver is a interrupt controller driver then you register
> > > your driver with kernel interrupt handling code and need to write some
> > > callbacks such as .mask,.unmask and so on.This callbacks are called at
> > > appropiate places whenever the interrupt is raised.This interrupt is then
> > > passed to drivers who has requested for this interrupt by calling
> > > request_irq.
> > > >
> > > > 2. My device, an AX88796B network controller, asserting the interrupt
> > > >    line in a level-triggered manner. Now I met problem with the device
> > > that
> > > >    might caused by the CPU interrupt mode is not set as level-triggered by
> > > >    edge trigger.  My CPU is Samsung S3C2410, an ARM920T powered one.  Does
> > > >    anyone know usually where and how should I do this kind of setting?
> > > Just pass the parameter "level triggered" in request_irq in your device
> > > driver.
> > 
> > Hi Sign,
> > 
> > I searched the interrupt.h for the all the defined flags that I can pass
> > to the request_irq, but there is no a flag looks like "level triggered".
> > Would you tell me what you mean the parameter "level triggered"?
> irq_set_irq_type(info->irq, IRQ_TYPE_LEVEL_LOW)
> 
> include/linux/irq.h
> IRQ_TYPE_LEVEL_HIGH          - high level triggered
> IRQ_TYPE_LEVEL_LOW           - low level triggered

Thanks. Now I find the function.

I searched some code about irq in ARM architecure.  Some other
people talked about do_IRQ() probabaly is wrong for ARM. There is simply
no that function in ARM. Maybe the do_IRQ in x86 is replaced by
handle_IRQ.

For the irq_set_irq_type(), do you think what's the correct place to
call it? Inside my device driver or outside the device driver (probably
in the board definition file)? If that should be called inside a device
driver, should it be the driver probe function or in the open function?
After or before the invocation of request_irq()?

Sorry for asking too many question.  I found the kernel + device driver
irq handling part still not clear to me.


> > 
> > Thanks.
> > 
> > > >
> > > >
> > > > Thanks in advance.
> > > >
> > > > --
> > > > woody
> > > > I can't go back to yesterday - because I was a different person then.
> > > >
> > > > _______________________________________________
> > > > Kernelnewbies mailing list
> > > > Kernelnewbies@kernelnewbies.org
> > > > http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies
> > 
> 

-- 
woody
I can't go back to yesterday - because I was a different person then.

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: How kernel handle interrupts[AX88796B network controller]
  2012-12-21 21:33     ` How kernel handle interrupts[AX88796B network controller] anish kumar
  2012-12-22 15:11       ` Woody Wu
@ 2012-12-24 14:10       ` Woody Wu
  2012-12-24 16:07         ` Woody Wu
  2013-01-07 16:22         ` anish kumar
  1 sibling, 2 replies; 7+ messages in thread
From: Woody Wu @ 2012-12-24 14:10 UTC (permalink / raw)
  To: anish kumar; +Cc: kernelnewbies, linux-kernel

On Fri, Dec 21, 2012 at 01:33:03PM -0800, anish kumar wrote:
> On Fri, 2012-12-21 at 23:34 +0800, Woody Wu wrote:
> > On Thu, Dec 20, 2012 at 10:05:05AM -0800, anish singh wrote:
> > > On Dec 20, 2012 6:30 AM, "Woody Wu" <narkewoody@gmail.com> wrote:
> > > >
> > > > Hi, List
> > > >
> > > > Where is the Kernel code that handles external interrupts? I want to
> > > > have a look at it but haven't found out where it is.
> > > >
> > > > Actually, I have some basic questions about interrupt handling in Linux.
> > > > 1. After Kernel's ISR received an interrupt, I believe it will invoke a
> > > >    handler defined in a device driver if any. But it should be the
> > > >    device driver's responsibility or kernel ISR's responsibility to
> > > >    clear (or acknowledge) the interrupt?
> > > If the interrupt in question is currently being handled then in
> > > the case of edge triggered interrupt we just mask the interrupt,set it
> > > pending and bail out.Once the interrupt handler completes then we check for
> > > pending interrupt and handle it.In level triggered we don't do that.
> > > Kerenel ISR -this is mixture of core kernel interrupt handling code + your
> > > device driver interrupt handler(if this is chip driver which is supposed to
> > > get one interrupt and is reponsible for calling other interrupt handlers
> > > based on the chip register status then you do explicit masking unmasking
> > > yourself).
> > > If you device driver is a interrupt controller driver then you register
> > > your driver with kernel interrupt handling code and need to write some
> > > callbacks such as .mask,.unmask and so on.This callbacks are called at
> > > appropiate places whenever the interrupt is raised.This interrupt is then
> > > passed to drivers who has requested for this interrupt by calling
> > > request_irq.
> > > >
> > > > 2. My device, an AX88796B network controller, asserting the interrupt
> > > >    line in a level-triggered manner. Now I met problem with the device
> > > that
> > > >    might caused by the CPU interrupt mode is not set as level-triggered by
> > > >    edge trigger.  My CPU is Samsung S3C2410, an ARM920T powered one.  Does
> > > >    anyone know usually where and how should I do this kind of setting?
> > > Just pass the parameter "level triggered" in request_irq in your device
> > > driver.
> > 
> > Hi Sign,
> > 
> > I searched the interrupt.h for the all the defined flags that I can pass
> > to the request_irq, but there is no a flag looks like "level triggered".
> > Would you tell me what you mean the parameter "level triggered"?
> irq_set_irq_type(info->irq, IRQ_TYPE_LEVEL_LOW)
> 
> include/linux/irq.h
> IRQ_TYPE_LEVEL_HIGH          - high level triggered
> IRQ_TYPE_LEVEL_LOW           - low level triggered

Thanks. You saved my ass.

Be curious, I found the api changes from 2.6 to 3.7.  In 2.6, there are
pair of funtions, set_irq_type and set_irq_handle (there is no
irq_set_irq_type in 2.6).  Problem is, I cannot find something like
irq_set_irq_handle in 3.7.  Does that mean, in 3.7, when
irq_set_irq_type is changed, the associated flow handler is also
changed?  In my case, the interrupt was originally assgined with a edge
flow handler and set type as edge irq. After I, by invoking
irq_set_irq_type, change it to level irq, I think the flow handler
should also be changed to a level handle.  Is that happened
automatically behind?  I search through the code, but did not find where
is it.


> > 
> > Thanks.
> > 
> > > >
> > > >
> > > > Thanks in advance.
> > > >
> > > > --
> > > > woody
> > > > I can't go back to yesterday - because I was a different person then.
> > > >
> > > > _______________________________________________
> > > > Kernelnewbies mailing list
> > > > Kernelnewbies@kernelnewbies.org
> > > > http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies
> > 
> 

-- 
woody
I can't go back to yesterday - because I was a different person then.

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: How kernel handle interrupts[AX88796B network controller]
  2012-12-24 14:10       ` Woody Wu
@ 2012-12-24 16:07         ` Woody Wu
  2013-01-07 16:22         ` anish kumar
  1 sibling, 0 replies; 7+ messages in thread
From: Woody Wu @ 2012-12-24 16:07 UTC (permalink / raw)
  To: anish kumar; +Cc: kernelnewbies, linux-kernel

On Mon, Dec 24, 2012 at 10:10:17PM +0800, Woody Wu wrote:
> On Fri, Dec 21, 2012 at 01:33:03PM -0800, anish kumar wrote:
> > On Fri, 2012-12-21 at 23:34 +0800, Woody Wu wrote:
> > > On Thu, Dec 20, 2012 at 10:05:05AM -0800, anish singh wrote:
> > > > On Dec 20, 2012 6:30 AM, "Woody Wu" <narkewoody@gmail.com> wrote:
> > > > >
> > > > > Hi, List
> > > > >
> > > > > Where is the Kernel code that handles external interrupts? I want to
> > > > > have a look at it but haven't found out where it is.
> > > > >
> > > > > Actually, I have some basic questions about interrupt handling in Linux.
> > > > > 1. After Kernel's ISR received an interrupt, I believe it will invoke a
> > > > >    handler defined in a device driver if any. But it should be the
> > > > >    device driver's responsibility or kernel ISR's responsibility to
> > > > >    clear (or acknowledge) the interrupt?
> > > > If the interrupt in question is currently being handled then in
> > > > the case of edge triggered interrupt we just mask the interrupt,set it
> > > > pending and bail out.Once the interrupt handler completes then we check for
> > > > pending interrupt and handle it.In level triggered we don't do that.
> > > > Kerenel ISR -this is mixture of core kernel interrupt handling code + your
> > > > device driver interrupt handler(if this is chip driver which is supposed to
> > > > get one interrupt and is reponsible for calling other interrupt handlers
> > > > based on the chip register status then you do explicit masking unmasking
> > > > yourself).
> > > > If you device driver is a interrupt controller driver then you register
> > > > your driver with kernel interrupt handling code and need to write some
> > > > callbacks such as .mask,.unmask and so on.This callbacks are called at
> > > > appropiate places whenever the interrupt is raised.This interrupt is then
> > > > passed to drivers who has requested for this interrupt by calling
> > > > request_irq.
> > > > >
> > > > > 2. My device, an AX88796B network controller, asserting the interrupt
> > > > >    line in a level-triggered manner. Now I met problem with the device
> > > > that
> > > > >    might caused by the CPU interrupt mode is not set as level-triggered by
> > > > >    edge trigger.  My CPU is Samsung S3C2410, an ARM920T powered one.  Does
> > > > >    anyone know usually where and how should I do this kind of setting?
> > > > Just pass the parameter "level triggered" in request_irq in your device
> > > > driver.
> > > 
> > > Hi Sign,
> > > 
> > > I searched the interrupt.h for the all the defined flags that I can pass
> > > to the request_irq, but there is no a flag looks like "level triggered".
> > > Would you tell me what you mean the parameter "level triggered"?
> > irq_set_irq_type(info->irq, IRQ_TYPE_LEVEL_LOW)
> > 
> > include/linux/irq.h
> > IRQ_TYPE_LEVEL_HIGH          - high level triggered
> > IRQ_TYPE_LEVEL_LOW           - low level triggered
> 
> Thanks. You saved my ass.
> 
> Be curious, I found the api changes from 2.6 to 3.7.  In 2.6, there are
> pair of funtions, set_irq_type and set_irq_handle (there is no
> irq_set_irq_type in 2.6).  Problem is, I cannot find something like
> irq_set_irq_handle in 3.7.  Does that mean, in 3.7, when
> irq_set_irq_type is changed, the associated flow handler is also
> changed?  In my case, the interrupt was originally assgined with a edge
> flow handler and set type as edge irq. After I, by invoking
> irq_set_irq_type, change it to level irq, I think the flow handler
> should also be changed to a level handle.  Is that happened
> automatically behind?  I search through the code, but did not find where
> is it.

Make it simple, is it necessary to also change the irq flow handler
after changed a irq type (from edge to level)? Is yes, what's the public
api that let user change flow handler for an irq?

Thanks in advance.

> 
> 
> > > 
> > > Thanks.
> > > 
> > > > >
> > > > >
> > > > > Thanks in advance.
> > > > >
> > > > > --
> > > > > woody
> > > > > I can't go back to yesterday - because I was a different person then.
> > > > >
> > > > > _______________________________________________
> > > > > Kernelnewbies mailing list
> > > > > Kernelnewbies@kernelnewbies.org
> > > > > http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies
> > > 
> > 
> 
> -- 
> woody
> I can't go back to yesterday - because I was a different person then.

-- 
woody
I can't go back to yesterday - because I was a different person then.

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: How kernel handle interrupts[AX88796B network controller]
  2012-12-24 14:10       ` Woody Wu
  2012-12-24 16:07         ` Woody Wu
@ 2013-01-07 16:22         ` anish kumar
  1 sibling, 0 replies; 7+ messages in thread
From: anish kumar @ 2013-01-07 16:22 UTC (permalink / raw)
  To: Woody Wu; +Cc: kernelnewbies, linux-kernel

On Mon, 2012-12-24 at 22:10 +0800, Woody Wu wrote:
> On Fri, Dec 21, 2012 at 01:33:03PM -0800, anish kumar wrote:
> > On Fri, 2012-12-21 at 23:34 +0800, Woody Wu wrote:
> > > On Thu, Dec 20, 2012 at 10:05:05AM -0800, anish singh wrote:
> > > > On Dec 20, 2012 6:30 AM, "Woody Wu" <narkewoody@gmail.com> wrote:
> > > > >
> > > > > Hi, List
> > > > >
> > > > > Where is the Kernel code that handles external interrupts? I want to
> > > > > have a look at it but haven't found out where it is.
> > > > >
> > > > > Actually, I have some basic questions about interrupt handling in Linux.
> > > > > 1. After Kernel's ISR received an interrupt, I believe it will invoke a
> > > > >    handler defined in a device driver if any. But it should be the
> > > > >    device driver's responsibility or kernel ISR's responsibility to
> > > > >    clear (or acknowledge) the interrupt?
> > > > If the interrupt in question is currently being handled then in
> > > > the case of edge triggered interrupt we just mask the interrupt,set it
> > > > pending and bail out.Once the interrupt handler completes then we check for
> > > > pending interrupt and handle it.In level triggered we don't do that.
> > > > Kerenel ISR -this is mixture of core kernel interrupt handling code + your
> > > > device driver interrupt handler(if this is chip driver which is supposed to
> > > > get one interrupt and is reponsible for calling other interrupt handlers
> > > > based on the chip register status then you do explicit masking unmasking
> > > > yourself).
> > > > If you device driver is a interrupt controller driver then you register
> > > > your driver with kernel interrupt handling code and need to write some
> > > > callbacks such as .mask,.unmask and so on.This callbacks are called at
> > > > appropiate places whenever the interrupt is raised.This interrupt is then
> > > > passed to drivers who has requested for this interrupt by calling
> > > > request_irq.
> > > > >
> > > > > 2. My device, an AX88796B network controller, asserting the interrupt
> > > > >    line in a level-triggered manner. Now I met problem with the device
> > > > that
> > > > >    might caused by the CPU interrupt mode is not set as level-triggered by
> > > > >    edge trigger.  My CPU is Samsung S3C2410, an ARM920T powered one.  Does
> > > > >    anyone know usually where and how should I do this kind of setting?
> > > > Just pass the parameter "level triggered" in request_irq in your device
> > > > driver.
> > > 
> > > Hi Sign,
> > > 
> > > I searched the interrupt.h for the all the defined flags that I can pass
> > > to the request_irq, but there is no a flag looks like "level triggered".
> > > Would you tell me what you mean the parameter "level triggered"?
> > irq_set_irq_type(info->irq, IRQ_TYPE_LEVEL_LOW)
> > 
> > include/linux/irq.h
> > IRQ_TYPE_LEVEL_HIGH          - high level triggered
> > IRQ_TYPE_LEVEL_LOW           - low level triggered
> 
> Thanks. You saved my ass.
> 
> Be curious, I found the api changes from 2.6 to 3.7.  In 2.6, there are
> pair of funtions, set_irq_type and set_irq_handle (there is no
> irq_set_irq_type in 2.6).  Problem is, I cannot find something like
> irq_set_irq_handle in 3.7.  Does that mean, in 3.7, when
> irq_set_irq_type is changed, the associated flow handler is also
> changed?  In my case, the interrupt was originally assgined with a edge
> flow handler and set type as edge irq. After I, by invoking
> irq_set_irq_type, change it to level irq, I think the flow handler
> should also be changed to a level handle.  Is that happened
> automatically behind?  I search through the code, but did not find where
> is it.
Why not try calling irq_set_irq_type and check what happens?
> 
> 
> > > 
> > > Thanks.
> > > 
> > > > >
> > > > >
> > > > > Thanks in advance.
> > > > >
> > > > > --
> > > > > woody
> > > > > I can't go back to yesterday - because I was a different person then.
> > > > >
> > > > > _______________________________________________
> > > > > Kernelnewbies mailing list
> > > > > Kernelnewbies@kernelnewbies.org
> > > > > http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies
> > > 
> > 
> 



^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: How kernel handle interrupts[AX88796B network controller]
  2012-12-22 15:11       ` Woody Wu
@ 2013-01-07 16:36         ` anish kumar
  2013-08-05  3:01           ` Woody Wu
  0 siblings, 1 reply; 7+ messages in thread
From: anish kumar @ 2013-01-07 16:36 UTC (permalink / raw)
  To: Woody Wu; +Cc: kernelnewbies, linux-kernel

On Sat, 2012-12-22 at 23:11 +0800, Woody Wu wrote:
> On Fri, Dec 21, 2012 at 01:33:03PM -0800, anish kumar wrote:
> > On Fri, 2012-12-21 at 23:34 +0800, Woody Wu wrote:
> > > On Thu, Dec 20, 2012 at 10:05:05AM -0800, anish singh wrote:
> > > > On Dec 20, 2012 6:30 AM, "Woody Wu" <narkewoody@gmail.com> wrote:
> > > > >
> > > > > Hi, List
> > > > >
> > > > > Where is the Kernel code that handles external interrupts? I want to
> > > > > have a look at it but haven't found out where it is.
> > > > >
> > > > > Actually, I have some basic questions about interrupt handling in Linux.
> > > > > 1. After Kernel's ISR received an interrupt, I believe it will invoke a
> > > > >    handler defined in a device driver if any. But it should be the
> > > > >    device driver's responsibility or kernel ISR's responsibility to
> > > > >    clear (or acknowledge) the interrupt?
> > > > If the interrupt in question is currently being handled then in
> > > > the case of edge triggered interrupt we just mask the interrupt,set it
> > > > pending and bail out.Once the interrupt handler completes then we check for
> > > > pending interrupt and handle it.In level triggered we don't do that.
> > > > Kerenel ISR -this is mixture of core kernel interrupt handling code + your
> > > > device driver interrupt handler(if this is chip driver which is supposed to
> > > > get one interrupt and is reponsible for calling other interrupt handlers
> > > > based on the chip register status then you do explicit masking unmasking
> > > > yourself).
> > > > If you device driver is a interrupt controller driver then you register
> > > > your driver with kernel interrupt handling code and need to write some
> > > > callbacks such as .mask,.unmask and so on.This callbacks are called at
> > > > appropiate places whenever the interrupt is raised.This interrupt is then
> > > > passed to drivers who has requested for this interrupt by calling
> > > > request_irq.
> > > > >
> > > > > 2. My device, an AX88796B network controller, asserting the interrupt
> > > > >    line in a level-triggered manner. Now I met problem with the device
> > > > that
> > > > >    might caused by the CPU interrupt mode is not set as level-triggered by
> > > > >    edge trigger.  My CPU is Samsung S3C2410, an ARM920T powered one.  Does
> > > > >    anyone know usually where and how should I do this kind of setting?
> > > > Just pass the parameter "level triggered" in request_irq in your device
> > > > driver.
> > > 
> > > Hi Sign,
> > > 
> > > I searched the interrupt.h for the all the defined flags that I can pass
> > > to the request_irq, but there is no a flag looks like "level triggered".
> > > Would you tell me what you mean the parameter "level triggered"?
> > irq_set_irq_type(info->irq, IRQ_TYPE_LEVEL_LOW)
> > 
> > include/linux/irq.h
> > IRQ_TYPE_LEVEL_HIGH          - high level triggered
> > IRQ_TYPE_LEVEL_LOW           - low level triggered
> 
> Thanks. Now I find the function.
> 
> I searched some code about irq in ARM architecure.  Some other
> people talked about do_IRQ() probabaly is wrong for ARM. There is simply
> no that function in ARM. Maybe the do_IRQ in x86 is replaced by
> handle_IRQ.
arch/arm/kernel/entry-armv.S
__irq_svc is called by the arm processor which in turn calls irq_handler
macro.I think this is the lowest level handler after which linux
interrupt handling takes over.
> 
> For the irq_set_irq_type(), do you think what's the correct place to
> call it? Inside my device driver or outside the device driver (probably
> in the board definition file)? If that should be called inside a device
> driver, should it be the driver probe function or in the open function?
> After or before the invocation of request_irq()?
irq_set_irq_type() should be called by device driver code not by the
board file.It should be called in the probe function AFAIK.
> 
> Sorry for asking too many question.  I found the kernel + device driver
> irq handling part still not clear to me.
You are welcome to ask as many question as you want.
> 
> 
> > > 
> > > Thanks.
> > > 
> > > > >
> > > > >
> > > > > Thanks in advance.
> > > > >
> > > > > --
> > > > > woody
> > > > > I can't go back to yesterday - because I was a different person then.
> > > > >
> > > > > _______________________________________________
> > > > > Kernelnewbies mailing list
> > > > > Kernelnewbies@kernelnewbies.org
> > > > > http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies
> > > 
> > 
> 



^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: How kernel handle interrupts[AX88796B network controller]
  2013-01-07 16:36         ` anish kumar
@ 2013-08-05  3:01           ` Woody Wu
  0 siblings, 0 replies; 7+ messages in thread
From: Woody Wu @ 2013-08-05  3:01 UTC (permalink / raw)
  To: anish kumar; +Cc: kernelnewbies, linux-kernel

On Mon, Jan 07, 2013 at 10:06:30PM +0530, anish kumar wrote:
> On Sat, 2012-12-22 at 23:11 +0800, Woody Wu wrote:
> > On Fri, Dec 21, 2012 at 01:33:03PM -0800, anish kumar wrote:
> > > On Fri, 2012-12-21 at 23:34 +0800, Woody Wu wrote:
> > > > On Thu, Dec 20, 2012 at 10:05:05AM -0800, anish singh wrote:
> > > > > On Dec 20, 2012 6:30 AM, "Woody Wu" <narkewoody@gmail.com> wrote:
> > > > > >
> > > > > > Hi, List
> > > > > >
> > > > > > Where is the Kernel code that handles external interrupts? I want to
> > > > > > have a look at it but haven't found out where it is.
> > > > > >
> > > > > > Actually, I have some basic questions about interrupt handling in Linux.
> > > > > > 1. After Kernel's ISR received an interrupt, I believe it will invoke a
> > > > > >    handler defined in a device driver if any. But it should be the
> > > > > >    device driver's responsibility or kernel ISR's responsibility to
> > > > > >    clear (or acknowledge) the interrupt?
> > > > > If the interrupt in question is currently being handled then in
> > > > > the case of edge triggered interrupt we just mask the interrupt,set it
> > > > > pending and bail out.Once the interrupt handler completes then we check for
> > > > > pending interrupt and handle it.In level triggered we don't do that.
> > > > > Kerenel ISR -this is mixture of core kernel interrupt handling code + your
> > > > > device driver interrupt handler(if this is chip driver which is supposed to
> > > > > get one interrupt and is reponsible for calling other interrupt handlers
> > > > > based on the chip register status then you do explicit masking unmasking
> > > > > yourself).
> > > > > If you device driver is a interrupt controller driver then you register
> > > > > your driver with kernel interrupt handling code and need to write some
> > > > > callbacks such as .mask,.unmask and so on.This callbacks are called at
> > > > > appropiate places whenever the interrupt is raised.This interrupt is then
> > > > > passed to drivers who has requested for this interrupt by calling
> > > > > request_irq.
> > > > > >
> > > > > > 2. My device, an AX88796B network controller, asserting the interrupt
> > > > > >    line in a level-triggered manner. Now I met problem with the device
> > > > > that
> > > > > >    might caused by the CPU interrupt mode is not set as level-triggered by
> > > > > >    edge trigger.  My CPU is Samsung S3C2410, an ARM920T powered one.  Does
> > > > > >    anyone know usually where and how should I do this kind of setting?
> > > > > Just pass the parameter "level triggered" in request_irq in your device
> > > > > driver.
> > > > 
> > > > Hi Sign,
> > > > 
> > > > I searched the interrupt.h for the all the defined flags that I can pass
> > > > to the request_irq, but there is no a flag looks like "level triggered".
> > > > Would you tell me what you mean the parameter "level triggered"?
> > > irq_set_irq_type(info->irq, IRQ_TYPE_LEVEL_LOW)
> > > 
> > > include/linux/irq.h
> > > IRQ_TYPE_LEVEL_HIGH          - high level triggered
> > > IRQ_TYPE_LEVEL_LOW           - low level triggered
> > 
> > Thanks. Now I find the function.
> > 
> > I searched some code about irq in ARM architecure.  Some other
> > people talked about do_IRQ() probabaly is wrong for ARM. There is simply
> > no that function in ARM. Maybe the do_IRQ in x86 is replaced by
> > handle_IRQ.
> arch/arm/kernel/entry-armv.S
> __irq_svc is called by the arm processor which in turn calls irq_handler
> macro.I think this is the lowest level handler after which linux
> interrupt handling takes over.
Only today, I saw this email you replied. Many thanks!

> > 
> > For the irq_set_irq_type(), do you think what's the correct place to
> > call it? Inside my device driver or outside the device driver (probably
> > in the board definition file)? If that should be called inside a device
> > driver, should it be the driver probe function or in the open function?
> > After or before the invocation of request_irq()?
> irq_set_irq_type() should be called by device driver code not by the
> board file.It should be called in the probe function AFAIK.
> > 
> > Sorry for asking too many question.  I found the kernel + device driver
> > irq handling part still not clear to me.
> You are welcome to ask as many question as you want.
> > 
> > 
> > > > 
> > > > Thanks.
> > > > 
> > > > > >
> > > > > >
> > > > > > Thanks in advance.
> > > > > >
> > > > > > --
> > > > > > woody
> > > > > > I can't go back to yesterday - because I was a different person then.
> > > > > >
> > > > > > _______________________________________________
> > > > > > Kernelnewbies mailing list
> > > > > > Kernelnewbies@kernelnewbies.org
> > > > > > http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies
> > > > 
> > > 
> > 
> 

-- 
I can't go back to yesterday - because I was a different person then

^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2013-08-05  3:06 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
     [not found] <20121220142745.GB3578@zuhnb712>
     [not found] ` <CAK7N6vq07CHhhOJTgC=5H5f3Nsi_od=qGJjzu01iL1_3AvTWHg@mail.gmail.com>
     [not found]   ` <20121221153451.GB5530@zuhnb712>
2012-12-21 21:33     ` How kernel handle interrupts[AX88796B network controller] anish kumar
2012-12-22 15:11       ` Woody Wu
2013-01-07 16:36         ` anish kumar
2013-08-05  3:01           ` Woody Wu
2012-12-24 14:10       ` Woody Wu
2012-12-24 16:07         ` Woody Wu
2013-01-07 16:22         ` anish kumar

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox