diff mbox

[U-Boot,v2,3/7] microblaze: intc: Registering interrupt should return value

Message ID 1344239199-11445-3-git-send-email-monstr@monstr.eu
State Accepted
Commit 8706908a2522f7d38f916e38ee13ca91e9f30bc5
Delegated to: Mike Frysinger
Headers show

Commit Message

Michal Simek Aug. 6, 2012, 7:46 a.m. UTC
Return value to find out if un/registration was succesful.

Signed-off-by: Michal Simek <monstr@monstr.eu>

---
v2: Add comment to header file to describe parameters and return codes
---
 arch/microblaze/cpu/interrupts.c              |   16 +++++++++-------
 arch/microblaze/include/asm/microblaze_intc.h |   11 ++++++++++-
 2 files changed, 19 insertions(+), 8 deletions(-)

Comments

Stephan Linz Aug. 7, 2012, 8:10 p.m. UTC | #1
Am Montag, den 06.08.2012, 09:46 +0200 schrieb Michal Simek: 
> Return value to find out if un/registration was succesful.
> 
> Signed-off-by: Michal Simek <monstr@monstr.eu>
> 
> ---
> v2: Add comment to header file to describe parameters and return codes
> ---
>  arch/microblaze/cpu/interrupts.c              |   16 +++++++++-------
>  arch/microblaze/include/asm/microblaze_intc.h |   11 ++++++++++-
>  2 files changed, 19 insertions(+), 8 deletions(-)
> 
> diff --git a/arch/microblaze/cpu/interrupts.c b/arch/microblaze/cpu/interrupts.c
> index ee67082..08f6bad 100644
> --- a/arch/microblaze/cpu/interrupts.c
> +++ b/arch/microblaze/cpu/interrupts.c
> @@ -91,14 +91,13 @@ static void disable_one_interrupt(int irq)
>  #endif
>  }
>  
> -/* adding new handler for interrupt */
> -void install_interrupt_handler (int irq, interrupt_handler_t * hdlr, void *arg)
> +int install_interrupt_handler(int irq, interrupt_handler_t *hdlr, void *arg)
>  {
>  	struct irq_action *act;
>  	/* irq out of range */
>  	if ((irq < 0) || (irq > irq_no)) {
>  		puts ("IRQ out of range\n");
> -		return;
> +		return -1;
>  	}
>  	act = &vecs[irq];
>  	if (hdlr) {		/* enable */
> @@ -106,11 +105,14 @@ void install_interrupt_handler (int irq, interrupt_handler_t * hdlr, void *arg)
>  		act->arg = arg;
>  		act->count = 0;
>  		enable_one_interrupt (irq);
> -	} else {		/* disable */
> -		act->handler = (interrupt_handler_t *) def_hdlr;
> -		act->arg = (void *)irq;
> -		disable_one_interrupt (irq);
> +		return 0;
>  	}
> +
> +	/* Disable */
> +	act->handler = (interrupt_handler_t *) def_hdlr;
> +	act->arg = (void *)irq;
> +	disable_one_interrupt(irq);
> +	return 1;
>  }
>  
>  /* initialization interrupt controller - hardware */
> diff --git a/arch/microblaze/include/asm/microblaze_intc.h b/arch/microblaze/include/asm/microblaze_intc.h
> index 6142b9c..e9640f5 100644
> --- a/arch/microblaze/include/asm/microblaze_intc.h
> +++ b/arch/microblaze/include/asm/microblaze_intc.h
> @@ -39,7 +39,16 @@ struct irq_action {
>  	int count; /* number of interrupt */
>  };
>  
> -void install_interrupt_handler (int irq, interrupt_handler_t * hdlr,
> +/**
> + * Register and unregister interrupt handler rutines
> + *
> + * @param irq	IRQ number
> + * @param hdlr	Interrupt handler rutine
> + * @param arg	Pointer to argument which is passed to int. handler rutine
> + * @return	0 if registration pass, 1 if unregistration pass,
> + *		or an error code < 0 otherwise
> + */
> +int install_interrupt_handler(int irq, interrupt_handler_t *hdlr,
>  				       void *arg);

Hi Michal,

why not two different functions here, one for registration, another one
for unregistration? To mee it is puzzling to use a 'install' function
for unregistration ...

... whatever, you should evaluate the return code in fsl_init2() too.

> 
>  int interrupts_init(void);
Michal Simek Aug. 8, 2012, 8:27 a.m. UTC | #2
On 08/07/2012 10:10 PM, Stephan Linz wrote:
> Am Montag, den 06.08.2012, 09:46 +0200 schrieb Michal Simek:
>> Return value to find out if un/registration was succesful.
>>
>> Signed-off-by: Michal Simek <monstr@monstr.eu>
>>
>> ---
>> v2: Add comment to header file to describe parameters and return codes
>> ---
>>   arch/microblaze/cpu/interrupts.c              |   16 +++++++++-------
>>   arch/microblaze/include/asm/microblaze_intc.h |   11 ++++++++++-
>>   2 files changed, 19 insertions(+), 8 deletions(-)
>>
>> diff --git a/arch/microblaze/cpu/interrupts.c b/arch/microblaze/cpu/interrupts.c
>> index ee67082..08f6bad 100644
>> --- a/arch/microblaze/cpu/interrupts.c
>> +++ b/arch/microblaze/cpu/interrupts.c
>> @@ -91,14 +91,13 @@ static void disable_one_interrupt(int irq)
>>   #endif
>>   }
>>
>> -/* adding new handler for interrupt */
>> -void install_interrupt_handler (int irq, interrupt_handler_t * hdlr, void *arg)
>> +int install_interrupt_handler(int irq, interrupt_handler_t *hdlr, void *arg)
>>   {
>>   	struct irq_action *act;
>>   	/* irq out of range */
>>   	if ((irq < 0) || (irq > irq_no)) {
>>   		puts ("IRQ out of range\n");
>> -		return;
>> +		return -1;
>>   	}
>>   	act = &vecs[irq];
>>   	if (hdlr) {		/* enable */
>> @@ -106,11 +105,14 @@ void install_interrupt_handler (int irq, interrupt_handler_t * hdlr, void *arg)
>>   		act->arg = arg;
>>   		act->count = 0;
>>   		enable_one_interrupt (irq);
>> -	} else {		/* disable */
>> -		act->handler = (interrupt_handler_t *) def_hdlr;
>> -		act->arg = (void *)irq;
>> -		disable_one_interrupt (irq);
>> +		return 0;
>>   	}
>> +
>> +	/* Disable */
>> +	act->handler = (interrupt_handler_t *) def_hdlr;
>> +	act->arg = (void *)irq;
>> +	disable_one_interrupt(irq);
>> +	return 1;
>>   }
>>
>>   /* initialization interrupt controller - hardware */
>> diff --git a/arch/microblaze/include/asm/microblaze_intc.h b/arch/microblaze/include/asm/microblaze_intc.h
>> index 6142b9c..e9640f5 100644
>> --- a/arch/microblaze/include/asm/microblaze_intc.h
>> +++ b/arch/microblaze/include/asm/microblaze_intc.h
>> @@ -39,7 +39,16 @@ struct irq_action {
>>   	int count; /* number of interrupt */
>>   };
>>
>> -void install_interrupt_handler (int irq, interrupt_handler_t * hdlr,
>> +/**
>> + * Register and unregister interrupt handler rutines
>> + *
>> + * @param irq	IRQ number
>> + * @param hdlr	Interrupt handler rutine
>> + * @param arg	Pointer to argument which is passed to int. handler rutine
>> + * @return	0 if registration pass, 1 if unregistration pass,
>> + *		or an error code < 0 otherwise
>> + */
>> +int install_interrupt_handler(int irq, interrupt_handler_t *hdlr,
>>   				       void *arg);
>
> Hi Michal,
>
> why not two different functions here, one for registration, another one
> for unregistration? To mee it is puzzling to use a 'install' function
> for unregistration ...

partially agree with that. Maybe we could introduce one macro for that.

#define uninstall_interrupt_handler(irq) install_interrupt_handler(irq, NULL, NULL)


> ... whatever, you should evaluate the return code in fsl_init2() too.

Not necessary to do it in this patch.

Thanks,
Michal
Stephan Linz Aug. 8, 2012, 5:47 p.m. UTC | #3
Am Mittwoch, den 08.08.2012, 10:27 +0200 schrieb Michal Simek: 
> On 08/07/2012 10:10 PM, Stephan Linz wrote:
> > Am Montag, den 06.08.2012, 09:46 +0200 schrieb Michal Simek:
> >> Return value to find out if un/registration was succesful.
> >>
> >> Signed-off-by: Michal Simek <monstr@monstr.eu>
> >>
> >> ---
> >> v2: Add comment to header file to describe parameters and return codes
> >> ---
> >>   arch/microblaze/cpu/interrupts.c              |   16 +++++++++-------
> >>   arch/microblaze/include/asm/microblaze_intc.h |   11 ++++++++++-
> >>   2 files changed, 19 insertions(+), 8 deletions(-)
> >>
> >> diff --git a/arch/microblaze/cpu/interrupts.c b/arch/microblaze/cpu/interrupts.c
> >> index ee67082..08f6bad 100644
> >> --- a/arch/microblaze/cpu/interrupts.c
> >> +++ b/arch/microblaze/cpu/interrupts.c
> >> @@ -91,14 +91,13 @@ static void disable_one_interrupt(int irq)
> >>   #endif
> >>   }
> >>
> >> -/* adding new handler for interrupt */
> >> -void install_interrupt_handler (int irq, interrupt_handler_t * hdlr, void *arg)
> >> +int install_interrupt_handler(int irq, interrupt_handler_t *hdlr, void *arg)
> >>   {
> >>   	struct irq_action *act;
> >>   	/* irq out of range */
> >>   	if ((irq < 0) || (irq > irq_no)) {
> >>   		puts ("IRQ out of range\n");
> >> -		return;
> >> +		return -1;
> >>   	}
> >>   	act = &vecs[irq];
> >>   	if (hdlr) {		/* enable */
> >> @@ -106,11 +105,14 @@ void install_interrupt_handler (int irq, interrupt_handler_t * hdlr, void *arg)
> >>   		act->arg = arg;
> >>   		act->count = 0;
> >>   		enable_one_interrupt (irq);
> >> -	} else {		/* disable */
> >> -		act->handler = (interrupt_handler_t *) def_hdlr;
> >> -		act->arg = (void *)irq;
> >> -		disable_one_interrupt (irq);
> >> +		return 0;
> >>   	}
> >> +
> >> +	/* Disable */
> >> +	act->handler = (interrupt_handler_t *) def_hdlr;
> >> +	act->arg = (void *)irq;
> >> +	disable_one_interrupt(irq);
> >> +	return 1;
> >>   }
> >>
> >>   /* initialization interrupt controller - hardware */
> >> diff --git a/arch/microblaze/include/asm/microblaze_intc.h b/arch/microblaze/include/asm/microblaze_intc.h
> >> index 6142b9c..e9640f5 100644
> >> --- a/arch/microblaze/include/asm/microblaze_intc.h
> >> +++ b/arch/microblaze/include/asm/microblaze_intc.h
> >> @@ -39,7 +39,16 @@ struct irq_action {
> >>   	int count; /* number of interrupt */
> >>   };
> >>
> >> -void install_interrupt_handler (int irq, interrupt_handler_t * hdlr,
> >> +/**
> >> + * Register and unregister interrupt handler rutines
> >> + *
> >> + * @param irq	IRQ number
> >> + * @param hdlr	Interrupt handler rutine
> >> + * @param arg	Pointer to argument which is passed to int. handler rutine
> >> + * @return	0 if registration pass, 1 if unregistration pass,
> >> + *		or an error code < 0 otherwise
> >> + */
> >> +int install_interrupt_handler(int irq, interrupt_handler_t *hdlr,
> >>   				       void *arg);
> >
> > Hi Michal,
> >
> > why not two different functions here, one for registration, another one
> > for unregistration? To mee it is puzzling to use a 'install' function
> > for unregistration ...
> 
> partially agree with that. Maybe we could introduce one macro for that.
> 
> #define uninstall_interrupt_handler(irq) install_interrupt_handler(irq, NULL, NULL)

yes, that is ok ...

> 
> 
> > ... whatever, you should evaluate the return code in fsl_init2() too.
> 
> Not necessary to do it in this patch.

yes, it's another part ...

br,
Stephan
diff mbox

Patch

diff --git a/arch/microblaze/cpu/interrupts.c b/arch/microblaze/cpu/interrupts.c
index ee67082..08f6bad 100644
--- a/arch/microblaze/cpu/interrupts.c
+++ b/arch/microblaze/cpu/interrupts.c
@@ -91,14 +91,13 @@  static void disable_one_interrupt(int irq)
 #endif
 }
 
-/* adding new handler for interrupt */
-void install_interrupt_handler (int irq, interrupt_handler_t * hdlr, void *arg)
+int install_interrupt_handler(int irq, interrupt_handler_t *hdlr, void *arg)
 {
 	struct irq_action *act;
 	/* irq out of range */
 	if ((irq < 0) || (irq > irq_no)) {
 		puts ("IRQ out of range\n");
-		return;
+		return -1;
 	}
 	act = &vecs[irq];
 	if (hdlr) {		/* enable */
@@ -106,11 +105,14 @@  void install_interrupt_handler (int irq, interrupt_handler_t * hdlr, void *arg)
 		act->arg = arg;
 		act->count = 0;
 		enable_one_interrupt (irq);
-	} else {		/* disable */
-		act->handler = (interrupt_handler_t *) def_hdlr;
-		act->arg = (void *)irq;
-		disable_one_interrupt (irq);
+		return 0;
 	}
+
+	/* Disable */
+	act->handler = (interrupt_handler_t *) def_hdlr;
+	act->arg = (void *)irq;
+	disable_one_interrupt(irq);
+	return 1;
 }
 
 /* initialization interrupt controller - hardware */
diff --git a/arch/microblaze/include/asm/microblaze_intc.h b/arch/microblaze/include/asm/microblaze_intc.h
index 6142b9c..e9640f5 100644
--- a/arch/microblaze/include/asm/microblaze_intc.h
+++ b/arch/microblaze/include/asm/microblaze_intc.h
@@ -39,7 +39,16 @@  struct irq_action {
 	int count; /* number of interrupt */
 };
 
-void install_interrupt_handler (int irq, interrupt_handler_t * hdlr,
+/**
+ * Register and unregister interrupt handler rutines
+ *
+ * @param irq	IRQ number
+ * @param hdlr	Interrupt handler rutine
+ * @param arg	Pointer to argument which is passed to int. handler rutine
+ * @return	0 if registration pass, 1 if unregistration pass,
+ *		or an error code < 0 otherwise
+ */
+int install_interrupt_handler(int irq, interrupt_handler_t *hdlr,
 				       void *arg);
 
 int interrupts_init(void);