* 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-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
* 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
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