2007-11-06 Till Straumann <strauman@slac.stanford.edu>

* mpc5xx/irq/irq.c, mpc5xx/exceptions/raw_exception.c,
	new-exceptions/raw_exception.c: test for non-NULL-ness before calling
	'on'/'off' methods so that users don't have to provide
	no-ops if they don't want this feature.
This commit is contained in:
Till Straumann
2007-11-06 21:54:18 +00:00
parent cad1f386ef
commit 8e1d542c07
4 changed files with 39 additions and 16 deletions

View File

@@ -1,3 +1,10 @@
2007-11-06 Till Straumann <strauman@slac.stanford.edu>
* mpc5xx/irq/irq.c, mpc5xx/exceptions/raw_exception.c,
new-exceptions/raw_exception.c: test for non-NULL-ness before calling
'on'/'off' methods so that users don't have to provide
no-ops if they don't want this feature.
2007-10-25 Thomas Doerfler <Thomas.Doerfler@embedded-brains.de> 2007-10-25 Thomas Doerfler <Thomas.Doerfler@embedded-brains.de>
* mpc83xx/network/tsec.c: * mpc83xx/network/tsec.c:

View File

@@ -95,6 +95,7 @@ int mpc5xx_set_exception (const rtems_raw_except_connect_data* except)
raw_except_table[except->exceptIndex] = *except; raw_except_table[except->exceptIndex] = *except;
exception_handler_table[except->exceptIndex] = except->hdl.raw_hdl; exception_handler_table[except->exceptIndex] = except->hdl.raw_hdl;
if (except->on)
except->on(except); except->on(except);
rtems_interrupt_enable(level); rtems_interrupt_enable(level);
@@ -132,6 +133,7 @@ int mpc5xx_delete_exception (const rtems_raw_except_connect_data* except)
rtems_interrupt_disable(level); rtems_interrupt_disable(level);
if (except->off)
except->off(except); except->off(except);
exception_handler_table[except->exceptIndex] = exception_handler_table[except->exceptIndex] =
default_raw_except_entry.hdl.raw_hdl; default_raw_except_entry.hdl.raw_hdl;
@@ -168,9 +170,11 @@ int mpc5xx_init_exceptions (rtems_raw_except_global_settings* config)
exception_handler_table[i] = raw_except_table[i].hdl.raw_hdl; exception_handler_table[i] = raw_except_table[i].hdl.raw_hdl;
if (raw_except_table[i].hdl.raw_hdl != default_raw_except_entry.hdl.raw_hdl) { if (raw_except_table[i].hdl.raw_hdl != default_raw_except_entry.hdl.raw_hdl) {
if (raw_except_table[i].on)
raw_except_table[i].on(&raw_except_table[i]); raw_except_table[i].on(&raw_except_table[i]);
} }
else { else {
if (raw_except_table[i].off)
raw_except_table[i].off(&raw_except_table[i]); raw_except_table[i].off(&raw_except_table[i]);
} }
} }

View File

@@ -252,6 +252,7 @@ int CPU_install_rtems_irq_handler (const rtems_irq_connect_data* irq)
/* /*
* Enable interrupt on device * Enable interrupt on device
*/ */
if (irq->on)
irq->on(irq); irq->on(irq);
rtems_interrupt_enable(level); rtems_interrupt_enable(level);
@@ -291,6 +292,7 @@ int CPU_remove_rtems_irq_handler (const rtems_irq_connect_data* irq)
/* /*
* Disable interrupt on device * Disable interrupt on device
*/ */
if (irq->off)
irq->off(irq); irq->off(irq);
if (is_uimb_irq(irq->name)) { if (is_uimb_irq(irq->name)) {
@@ -345,9 +347,11 @@ int CPU_rtems_irq_mngt_set (rtems_irq_global_settings* config)
for (i = CPU_UIMB_IRQ_MIN_OFFSET; i <= CPU_UIMB_IRQ_MAX_OFFSET ; i++) { for (i = CPU_UIMB_IRQ_MIN_OFFSET; i <= CPU_UIMB_IRQ_MAX_OFFSET ; i++) {
if (rtems_hdl_tbl[i].hdl != default_rtems_entry.hdl) { if (rtems_hdl_tbl[i].hdl != default_rtems_entry.hdl) {
CPU_irq_enable_at_uimb (i); CPU_irq_enable_at_uimb (i);
if (rtems_hdl_tbl[i].on)
rtems_hdl_tbl[i].on(&rtems_hdl_tbl[i]); rtems_hdl_tbl[i].on(&rtems_hdl_tbl[i]);
} }
else { else {
if (rtems_hdl_tbl[i].off)
rtems_hdl_tbl[i].off(&rtems_hdl_tbl[i]); rtems_hdl_tbl[i].off(&rtems_hdl_tbl[i]);
CPU_irq_disable_at_uimb (i); CPU_irq_disable_at_uimb (i);
} }
@@ -362,9 +366,11 @@ int CPU_rtems_irq_mngt_set (rtems_irq_global_settings* config)
for (i = CPU_USIU_IRQ_MIN_OFFSET; i <= CPU_USIU_IRQ_MAX_OFFSET ; i++) { for (i = CPU_USIU_IRQ_MIN_OFFSET; i <= CPU_USIU_IRQ_MAX_OFFSET ; i++) {
if (rtems_hdl_tbl[i].hdl != default_rtems_entry.hdl) { if (rtems_hdl_tbl[i].hdl != default_rtems_entry.hdl) {
CPU_irq_enable_at_usiu (i); CPU_irq_enable_at_usiu (i);
if (rtems_hdl_tbl[i].on)
rtems_hdl_tbl[i].on(&rtems_hdl_tbl[i]); rtems_hdl_tbl[i].on(&rtems_hdl_tbl[i]);
} }
else { else {
if (rtems_hdl_tbl[i].off)
rtems_hdl_tbl[i].off(&rtems_hdl_tbl[i]); rtems_hdl_tbl[i].off(&rtems_hdl_tbl[i]);
CPU_irq_disable_at_usiu (i); CPU_irq_disable_at_usiu (i);
} }
@@ -381,9 +387,11 @@ int CPU_rtems_irq_mngt_set (rtems_irq_global_settings* config)
*/ */
for (i = CPU_PROC_IRQ_MIN_OFFSET; i <= CPU_PROC_IRQ_MAX_OFFSET; i++) { for (i = CPU_PROC_IRQ_MIN_OFFSET; i <= CPU_PROC_IRQ_MAX_OFFSET; i++) {
if (rtems_hdl_tbl[i].hdl != default_rtems_entry.hdl) { if (rtems_hdl_tbl[i].hdl != default_rtems_entry.hdl) {
if (rtems_hdl_tbl[i].on)
rtems_hdl_tbl[i].on(&rtems_hdl_tbl[i]); rtems_hdl_tbl[i].on(&rtems_hdl_tbl[i]);
} }
else { else {
if (rtems_hdl_tbl[i].off)
rtems_hdl_tbl[i].off(&rtems_hdl_tbl[i]); rtems_hdl_tbl[i].off(&rtems_hdl_tbl[i]);
} }
} }

View File

@@ -415,6 +415,7 @@ int ppc_set_exception (const rtems_raw_except_connect_data* except)
except->hdl.raw_hdl, except->hdl.raw_hdl,
except->hdl.raw_hdl_size, except->hdl.raw_hdl_size,
PPC_CACHE_ALIGNMENT); PPC_CACHE_ALIGNMENT);
if (except->on)
except->on(except); except->on(except);
_ISR_Enable(level); _ISR_Enable(level);
@@ -453,6 +454,7 @@ int ppc_delete_exception (const rtems_raw_except_connect_data* except)
} }
_ISR_Disable(level); _ISR_Disable(level);
if (except->off)
except->off(except); except->off(except);
codemove((void*)ppc_get_vector_addr(except->exceptIndex), codemove((void*)ppc_get_vector_addr(except->exceptIndex),
default_raw_except_entry.hdl.raw_hdl, default_raw_except_entry.hdl.raw_hdl,
@@ -494,9 +496,11 @@ int ppc_init_exceptions (rtems_raw_except_global_settings* config)
raw_except_table[i].hdl.raw_hdl_size, raw_except_table[i].hdl.raw_hdl_size,
PPC_CACHE_ALIGNMENT); PPC_CACHE_ALIGNMENT);
if (raw_except_table[i].hdl.raw_hdl != default_raw_except_entry.hdl.raw_hdl) { if (raw_except_table[i].hdl.raw_hdl != default_raw_except_entry.hdl.raw_hdl) {
if (raw_except_table[i].on)
raw_except_table[i].on(&raw_except_table[i]); raw_except_table[i].on(&raw_except_table[i]);
} }
else { else {
if (raw_except_table[i].off)
raw_except_table[i].off(&raw_except_table[i]); raw_except_table[i].off(&raw_except_table[i]);
} }
} }