mirror of
https://github.com/OpenAMP/libmetal.git
synced 2026-09-23 10:43:49 +08:00
test: update irq test for irq registration API change
The IRQ registration API has been updated to support single handler per IRQ. The IRQ test is updated for this change. Signed-off-by: Wendy Liang <wendy.liang@xilinx.com>
This commit is contained in:
+20
-158
@@ -18,8 +18,7 @@
|
||||
#include <metal/list.h>
|
||||
#include <metal/utilities.h>
|
||||
|
||||
|
||||
int irq_handler(int irq, void *priv)
|
||||
static int irq_handler(int irq, void *priv)
|
||||
{
|
||||
(void)irq;
|
||||
(void)priv;
|
||||
@@ -27,10 +26,17 @@ int irq_handler(int irq, void *priv)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int irq_handler2(int irq, void *priv)
|
||||
{
|
||||
(void)irq;
|
||||
(void)priv;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int irq(void)
|
||||
{
|
||||
int rc = 0, flags_1, flags_2;
|
||||
int rc = 0;
|
||||
char *err_msg="";
|
||||
enum metal_log_level mll= metal_get_log_level();
|
||||
|
||||
@@ -39,174 +45,30 @@ static int irq(void)
|
||||
|
||||
rc = metal_irq_register(1, irq_handler, 0, (void *)1);
|
||||
if (rc) {
|
||||
err_msg = "register irq 1 fail drv_id 1\n";
|
||||
err_msg = "register irq 0 fail drv_id 1\n";
|
||||
goto out;
|
||||
}
|
||||
rc = metal_irq_register(2, irq_handler, 0, (void *)1);
|
||||
if (rc) {
|
||||
err_msg = "register irq 2 fail drv_id 1\n";
|
||||
err_msg = "register irq 1 fail drv_id 1\n";
|
||||
goto out;
|
||||
}
|
||||
rc = metal_irq_register(2, irq_handler, 0, (void *)2);
|
||||
if (rc) {
|
||||
err_msg = "register irq 2 fail drv_id 2\n";
|
||||
goto out;
|
||||
}
|
||||
rc = metal_irq_register(3, irq_handler, 0, (void *)1);
|
||||
if (rc) {
|
||||
err_msg = "register irq 3 fail drv_id 1\n";
|
||||
goto out;
|
||||
}
|
||||
rc = metal_irq_register(4, irq_handler, 0, (void *)1);
|
||||
if (rc) {
|
||||
err_msg = "register irq 4 fail drv_id 1\n";
|
||||
goto out;
|
||||
}
|
||||
rc = metal_irq_register(4, irq_handler, 0, (void *)2);
|
||||
if (rc) {
|
||||
err_msg = "register irq 4 fail drv_id 2\n";
|
||||
goto out;
|
||||
}
|
||||
rc = metal_irq_register(1, irq_handler, 0, (void *)2);
|
||||
if (rc) {
|
||||
err_msg = "register irq 1 fail drv_id 2\n";
|
||||
rc = metal_irq_register(2, irq_handler2, 0, (void *)2);
|
||||
if (rc == 0) {
|
||||
err_msg = "expect 2nd register irq 1 fail, but succeeded\n";
|
||||
goto out;
|
||||
}
|
||||
|
||||
rc = metal_irq_unregister(1, 0, 0, (void *)0);
|
||||
metal_irq_unregister(1);
|
||||
rc = metal_irq_register(1, irq_handler, 0, (void *)1);
|
||||
if (rc) {
|
||||
err_msg = "unregister irq 1 failed \n";
|
||||
goto out;
|
||||
}
|
||||
rc = metal_irq_unregister(1, 0, 0, (void *)0);
|
||||
if (!rc) {
|
||||
err_msg = "unregister irq 1 fail expected\n";
|
||||
err_msg = "register irq 0 after unregistering failed\n";
|
||||
goto out;
|
||||
}
|
||||
metal_irq_unregister(1);
|
||||
metal_irq_unregister(2);
|
||||
|
||||
rc = metal_irq_unregister(2, 0, 0, (void *)2);
|
||||
if (rc) {
|
||||
err_msg = "unregister irq 2 drv_id 2 failed \n";
|
||||
goto out;
|
||||
}
|
||||
rc = metal_irq_unregister(2, 0, 0, (void *)2);
|
||||
if (!rc) {
|
||||
err_msg = "unregister irq 2 drv_id 2 fail expected\n";
|
||||
goto out;
|
||||
}
|
||||
rc = metal_irq_register(2, irq_handler, 0, (void *)2);
|
||||
if (rc) {
|
||||
err_msg = "register irq 2 fail drv_id 2\n";
|
||||
goto out;
|
||||
}
|
||||
rc = metal_irq_unregister(2, 0, 0, (void *)1);
|
||||
if (rc) {
|
||||
err_msg = "unregister irq 2 drv_id 1 failed \n";
|
||||
goto out;
|
||||
}
|
||||
rc = metal_irq_unregister(2, 0, 0, (void *)2);
|
||||
if (rc) {
|
||||
err_msg = "unregister irq 2 drv_id 2 failed \n";
|
||||
goto out;
|
||||
}
|
||||
|
||||
rc = metal_irq_register(3, irq_handler, 0, (void *)1);
|
||||
if (!rc) {
|
||||
err_msg = "register irq 3 drv_id 1 overwrite fail expected\n";
|
||||
goto out;
|
||||
}
|
||||
rc = metal_irq_register(3, irq_handler, 0, (void *)2);
|
||||
if (rc) {
|
||||
err_msg = "register irq 3 fail drv_id 2\n";
|
||||
goto out;
|
||||
}
|
||||
rc = metal_irq_unregister(3, irq_handler+1, 0, (void *)0);
|
||||
if (!rc) {
|
||||
err_msg = "unregister irq 3 match handler fail expected\n";
|
||||
goto out;
|
||||
}
|
||||
rc = metal_irq_unregister(3, irq_handler, 0, (void *)0);
|
||||
if (rc) {
|
||||
err_msg = "unregister irq 3 match handler failed \n";
|
||||
goto out;
|
||||
}
|
||||
|
||||
rc = metal_irq_unregister(4, irq_handler, 0, (void *)2);
|
||||
if (rc) {
|
||||
err_msg = "unregister irq 4 match handler and drv_id 2 failed \n";
|
||||
goto out;
|
||||
}
|
||||
rc = metal_irq_unregister(4, irq_handler, 0, (void *)1);
|
||||
if (rc) {
|
||||
err_msg = "unregister irq 4 match handler and drv_id 1 failed \n";
|
||||
goto out;
|
||||
}
|
||||
|
||||
rc = metal_irq_register(5, irq_handler, (void *)10, (void *)1);
|
||||
if (rc) {
|
||||
err_msg = "register irq 5 fail dev 10 drv_id 1\n";
|
||||
goto out;
|
||||
}
|
||||
rc = metal_irq_register(5, irq_handler, (void *)20, (void *)2);
|
||||
if (rc) {
|
||||
err_msg = "register irq 5 fail dev 20 drv_id 2\n";
|
||||
goto out;
|
||||
}
|
||||
rc = metal_irq_register(5, irq_handler, (void *)10, (void *)3);
|
||||
if (rc) {
|
||||
err_msg = "register irq 5 fail dev 10 drv_id 3\n";
|
||||
goto out;
|
||||
}
|
||||
rc = metal_irq_register(5, irq_handler, 0, (void *)4);
|
||||
if (rc) {
|
||||
err_msg = "register irq 5 fail drv_id 4\n";
|
||||
goto out;
|
||||
}
|
||||
rc = metal_irq_register(5, irq_handler, (void *)10, (void *)5);
|
||||
if (rc) {
|
||||
err_msg = "register irq 5 fail dev 10 drv_id 5\n";
|
||||
goto out;
|
||||
}
|
||||
|
||||
rc = metal_irq_unregister(5, irq_handler, (void *)10, (void *)3);
|
||||
if (rc) {
|
||||
err_msg = "unregister irq 5 match handle, dev 10 and drv_id 3 failed \n";
|
||||
goto out;
|
||||
}
|
||||
rc = metal_irq_unregister(5, 0, 0, (void *)4);
|
||||
if (rc) {
|
||||
err_msg = "unregister irq 5 drv_id 4 failed \n";
|
||||
goto out;
|
||||
}
|
||||
rc = metal_irq_unregister(5, 0, (void *)10, 0);
|
||||
if (rc) {
|
||||
err_msg = "unregister irq 5 dev 10 failed \n";
|
||||
goto out;
|
||||
}
|
||||
rc = metal_irq_unregister(5, 0, (void *)20, (void *)2);
|
||||
if (rc) {
|
||||
err_msg = "unregister irq 5 match dev 20 and drv_id 2 failed \n";
|
||||
goto out;
|
||||
}
|
||||
|
||||
rc = metal_irq_register(-1, irq_handler, 0, (void *)1);
|
||||
if (!rc) {
|
||||
err_msg = "register irq -1 should have failed\n";
|
||||
goto out;
|
||||
}
|
||||
|
||||
/* global interrupt disable/enable normal behavior */
|
||||
flags_1=metal_irq_save_disable();
|
||||
metal_irq_restore_enable(flags_1);
|
||||
|
||||
/* global interrupt less common */
|
||||
flags_1=metal_irq_save_disable();
|
||||
flags_2=metal_irq_save_disable();
|
||||
metal_irq_restore_enable(flags_2);
|
||||
metal_irq_restore_enable(flags_1);
|
||||
|
||||
rc = 0;
|
||||
|
||||
return 0;
|
||||
out:
|
||||
metal_set_log_level(mll);
|
||||
if ((err_msg[0] != '\0') && (!rc))
|
||||
|
||||
+20
-158
@@ -18,8 +18,7 @@
|
||||
#include <metal/list.h>
|
||||
#include <metal/utilities.h>
|
||||
|
||||
|
||||
int irq_handler(int irq, void *priv)
|
||||
static int irq_handler(int irq, void *priv)
|
||||
{
|
||||
(void)irq;
|
||||
(void)priv;
|
||||
@@ -27,10 +26,17 @@ int irq_handler(int irq, void *priv)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int irq_handler2(int irq, void *priv)
|
||||
{
|
||||
(void)irq;
|
||||
(void)priv;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int irq(void)
|
||||
{
|
||||
int rc = 0, flags_1, flags_2;
|
||||
int rc = 0;
|
||||
char *err_msg="";
|
||||
enum metal_log_level mll= metal_get_log_level();
|
||||
|
||||
@@ -39,174 +45,30 @@ static int irq(void)
|
||||
|
||||
rc = metal_irq_register(1, irq_handler, 0, (void *)1);
|
||||
if (rc) {
|
||||
err_msg = "register irq 1 fail drv_id 1\n";
|
||||
err_msg = "register irq 0 fail drv_id 1\n";
|
||||
goto out;
|
||||
}
|
||||
rc = metal_irq_register(2, irq_handler, 0, (void *)1);
|
||||
if (rc) {
|
||||
err_msg = "register irq 2 fail drv_id 1\n";
|
||||
err_msg = "register irq 1 fail drv_id 1\n";
|
||||
goto out;
|
||||
}
|
||||
rc = metal_irq_register(2, irq_handler, 0, (void *)2);
|
||||
if (rc) {
|
||||
err_msg = "register irq 2 fail drv_id 2\n";
|
||||
goto out;
|
||||
}
|
||||
rc = metal_irq_register(3, irq_handler, 0, (void *)1);
|
||||
if (rc) {
|
||||
err_msg = "register irq 3 fail drv_id 1\n";
|
||||
goto out;
|
||||
}
|
||||
rc = metal_irq_register(4, irq_handler, 0, (void *)1);
|
||||
if (rc) {
|
||||
err_msg = "register irq 4 fail drv_id 1\n";
|
||||
goto out;
|
||||
}
|
||||
rc = metal_irq_register(4, irq_handler, 0, (void *)2);
|
||||
if (rc) {
|
||||
err_msg = "register irq 4 fail drv_id 2\n";
|
||||
goto out;
|
||||
}
|
||||
rc = metal_irq_register(1, irq_handler, 0, (void *)2);
|
||||
if (rc) {
|
||||
err_msg = "register irq 1 fail drv_id 2\n";
|
||||
rc = metal_irq_register(2, irq_handler2, 0, (void *)2);
|
||||
if (rc == 0) {
|
||||
err_msg = "expect 2nd register irq 1 fail, but succeeded\n";
|
||||
goto out;
|
||||
}
|
||||
|
||||
rc = metal_irq_unregister(1, 0, 0, (void *)0);
|
||||
metal_irq_unregister(1);
|
||||
rc = metal_irq_register(1, irq_handler, 0, (void *)1);
|
||||
if (rc) {
|
||||
err_msg = "unregister irq 1 failed \n";
|
||||
goto out;
|
||||
}
|
||||
rc = metal_irq_unregister(1, 0, 0, (void *)0);
|
||||
if (!rc) {
|
||||
err_msg = "unregister irq 1 fail expected\n";
|
||||
err_msg = "register irq 0 after unregistering failed\n";
|
||||
goto out;
|
||||
}
|
||||
metal_irq_unregister(1);
|
||||
metal_irq_unregister(2);
|
||||
|
||||
rc = metal_irq_unregister(2, 0, 0, (void *)2);
|
||||
if (rc) {
|
||||
err_msg = "unregister irq 2 drv_id 2 failed \n";
|
||||
goto out;
|
||||
}
|
||||
rc = metal_irq_unregister(2, 0, 0, (void *)2);
|
||||
if (!rc) {
|
||||
err_msg = "unregister irq 2 drv_id 2 fail expected\n";
|
||||
goto out;
|
||||
}
|
||||
rc = metal_irq_register(2, irq_handler, 0, (void *)2);
|
||||
if (rc) {
|
||||
err_msg = "register irq 2 fail drv_id 2\n";
|
||||
goto out;
|
||||
}
|
||||
rc = metal_irq_unregister(2, 0, 0, (void *)1);
|
||||
if (rc) {
|
||||
err_msg = "unregister irq 2 drv_id 1 failed \n";
|
||||
goto out;
|
||||
}
|
||||
rc = metal_irq_unregister(2, 0, 0, (void *)2);
|
||||
if (rc) {
|
||||
err_msg = "unregister irq 2 drv_id 2 failed \n";
|
||||
goto out;
|
||||
}
|
||||
|
||||
rc = metal_irq_register(3, irq_handler, 0, (void *)1);
|
||||
if (!rc) {
|
||||
err_msg = "register irq 3 drv_id 1 overwrite fail expected\n";
|
||||
goto out;
|
||||
}
|
||||
rc = metal_irq_register(3, irq_handler, 0, (void *)2);
|
||||
if (rc) {
|
||||
err_msg = "register irq 3 fail drv_id 2\n";
|
||||
goto out;
|
||||
}
|
||||
rc = metal_irq_unregister(3, irq_handler+1, 0, (void *)0);
|
||||
if (!rc) {
|
||||
err_msg = "unregister irq 3 match handler fail expected\n";
|
||||
goto out;
|
||||
}
|
||||
rc = metal_irq_unregister(3, irq_handler, 0, (void *)0);
|
||||
if (rc) {
|
||||
err_msg = "unregister irq 3 match handler failed \n";
|
||||
goto out;
|
||||
}
|
||||
|
||||
rc = metal_irq_unregister(4, irq_handler, 0, (void *)2);
|
||||
if (rc) {
|
||||
err_msg = "unregister irq 4 match handler and drv_id 2 failed \n";
|
||||
goto out;
|
||||
}
|
||||
rc = metal_irq_unregister(4, irq_handler, 0, (void *)1);
|
||||
if (rc) {
|
||||
err_msg = "unregister irq 4 match handler and drv_id 1 failed \n";
|
||||
goto out;
|
||||
}
|
||||
|
||||
rc = metal_irq_register(5, irq_handler, (void *)10, (void *)1);
|
||||
if (rc) {
|
||||
err_msg = "register irq 5 fail dev 10 drv_id 1\n";
|
||||
goto out;
|
||||
}
|
||||
rc = metal_irq_register(5, irq_handler, (void *)20, (void *)2);
|
||||
if (rc) {
|
||||
err_msg = "register irq 5 fail dev 20 drv_id 2\n";
|
||||
goto out;
|
||||
}
|
||||
rc = metal_irq_register(5, irq_handler, (void *)10, (void *)3);
|
||||
if (rc) {
|
||||
err_msg = "register irq 5 fail dev 10 drv_id 3\n";
|
||||
goto out;
|
||||
}
|
||||
rc = metal_irq_register(5, irq_handler, 0, (void *)4);
|
||||
if (rc) {
|
||||
err_msg = "register irq 5 fail drv_id 4\n";
|
||||
goto out;
|
||||
}
|
||||
rc = metal_irq_register(5, irq_handler, (void *)10, (void *)5);
|
||||
if (rc) {
|
||||
err_msg = "register irq 5 fail dev 10 drv_id 5\n";
|
||||
goto out;
|
||||
}
|
||||
|
||||
rc = metal_irq_unregister(5, irq_handler, (void *)10, (void *)3);
|
||||
if (rc) {
|
||||
err_msg = "unregister irq 5 match handle, dev 10 and drv_id 3 failed \n";
|
||||
goto out;
|
||||
}
|
||||
rc = metal_irq_unregister(5, 0, 0, (void *)4);
|
||||
if (rc) {
|
||||
err_msg = "unregister irq 5 drv_id 4 failed \n";
|
||||
goto out;
|
||||
}
|
||||
rc = metal_irq_unregister(5, 0, (void *)10, 0);
|
||||
if (rc) {
|
||||
err_msg = "unregister irq 5 dev 10 failed \n";
|
||||
goto out;
|
||||
}
|
||||
rc = metal_irq_unregister(5, 0, (void *)20, (void *)2);
|
||||
if (rc) {
|
||||
err_msg = "unregister irq 5 match dev 20 and drv_id 2 failed \n";
|
||||
goto out;
|
||||
}
|
||||
|
||||
rc = metal_irq_register(-1, irq_handler, 0, (void *)1);
|
||||
if (!rc) {
|
||||
err_msg = "register irq -1 should have failed\n";
|
||||
goto out;
|
||||
}
|
||||
|
||||
/* global interrupt disable/enable normal behavior */
|
||||
flags_1=metal_irq_save_disable();
|
||||
metal_irq_restore_enable(flags_1);
|
||||
|
||||
/* global interrupt less common */
|
||||
flags_1=metal_irq_save_disable();
|
||||
flags_2=metal_irq_save_disable();
|
||||
metal_irq_restore_enable(flags_2);
|
||||
metal_irq_restore_enable(flags_1);
|
||||
|
||||
rc = 0;
|
||||
|
||||
return 0;
|
||||
out:
|
||||
metal_set_log_level(mll);
|
||||
if ((err_msg[0] != '\0') && (!rc))
|
||||
|
||||
+27
-147
@@ -20,7 +20,7 @@
|
||||
#include <metal/utilities.h>
|
||||
|
||||
|
||||
int irq_handler(int irq, void *priv)
|
||||
static int irq_handler(int irq, void *priv)
|
||||
{
|
||||
(void)irq;
|
||||
(void)priv;
|
||||
@@ -28,179 +28,59 @@ int irq_handler(int irq, void *priv)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int irq_handler2(int irq, void *priv)
|
||||
{
|
||||
(void)irq;
|
||||
(void)priv;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int irq(void)
|
||||
{
|
||||
int rc = 0;
|
||||
char *err_msg="";
|
||||
enum metal_log_level mll= metal_get_log_level();
|
||||
int i, tst_irq[6];
|
||||
int i, tst_irq[2];
|
||||
|
||||
/* Do not show LOG_ERROR or LOG_DEBUG for expected fail case */
|
||||
metal_set_log_level(METAL_LOG_CRITICAL);
|
||||
|
||||
for (i=1; i < 6; i++) {
|
||||
for (i = 0; i < 2; i++) {
|
||||
/* we only want to test the lib API, so create 'virtual' IRQs */
|
||||
tst_irq[i] = eventfd(0,0);
|
||||
metal_log(METAL_LOG_DEBUG, "%s: irq %d associated with fd %d\n", __func__, i, tst_irq[i]);
|
||||
metal_log(METAL_LOG_DEBUG, "%s: irq %d associated with fd %d\n",
|
||||
__func__, i, tst_irq[i]);
|
||||
}
|
||||
|
||||
rc = metal_irq_register(tst_irq[0], irq_handler, 0, (void *)1);
|
||||
if (rc) {
|
||||
err_msg = "register irq 0 fail drv_id 1\n";
|
||||
goto out;
|
||||
}
|
||||
rc = metal_irq_register(tst_irq[1], irq_handler, 0, (void *)1);
|
||||
if (rc) {
|
||||
err_msg = "register irq 1 fail drv_id 1\n";
|
||||
goto out;
|
||||
}
|
||||
rc = metal_irq_register(tst_irq[2], irq_handler, 0, (void *)1);
|
||||
if (rc) {
|
||||
err_msg = "register irq 2 fail drv_id 1\n";
|
||||
goto out;
|
||||
}
|
||||
rc = metal_irq_register(tst_irq[2], irq_handler, 0, (void *)2);
|
||||
if (rc) {
|
||||
err_msg = "register irq 2 fail drv_id 2\n";
|
||||
goto out;
|
||||
}
|
||||
rc = metal_irq_register(tst_irq[3], irq_handler, 0, (void *)1);
|
||||
if (rc) {
|
||||
err_msg = "register irq 3 fail drv_id 1\n";
|
||||
goto out;
|
||||
}
|
||||
rc = metal_irq_register(tst_irq[4], irq_handler, 0, (void *)1);
|
||||
if (rc) {
|
||||
err_msg = "register irq 4 fail drv_id 1\n";
|
||||
goto out;
|
||||
}
|
||||
rc = metal_irq_register(tst_irq[4], irq_handler, 0, (void *)2);
|
||||
if (rc) {
|
||||
err_msg = "register irq 4 fail drv_id 2\n";
|
||||
goto out;
|
||||
}
|
||||
rc = metal_irq_register(tst_irq[1], irq_handler, 0, (void *)2);
|
||||
if (rc) {
|
||||
err_msg = "register irq 1 fail drv_id 2\n";
|
||||
rc = metal_irq_register(tst_irq[1], irq_handler2, 0, (void *)2);
|
||||
if (rc == 0) {
|
||||
err_msg = "expect 2nd register irq 1 fail, but succeeded\n";
|
||||
goto out;
|
||||
}
|
||||
|
||||
rc = metal_irq_unregister(tst_irq[1], 0, 0, (void *)0);
|
||||
metal_irq_unregister(tst_irq[0]);
|
||||
rc = metal_irq_register(tst_irq[0], irq_handler, 0, (void *)1);
|
||||
if (rc) {
|
||||
err_msg = "unregister irq 1 failed \n";
|
||||
goto out;
|
||||
}
|
||||
rc = metal_irq_unregister(tst_irq[1], 0, 0, (void *)0);
|
||||
if (!rc) {
|
||||
err_msg = "unregister irq 1 success but fail expected\n";
|
||||
err_msg = "register irq 0 after unregistering failed\n";
|
||||
goto out;
|
||||
}
|
||||
metal_irq_unregister(tst_irq[0]);
|
||||
metal_irq_unregister(tst_irq[1]);
|
||||
|
||||
rc = metal_irq_unregister(tst_irq[2], 0, 0, (void *)2);
|
||||
if (rc) {
|
||||
err_msg = "unregister irq 2 drv_id 2 failed \n";
|
||||
goto out;
|
||||
}
|
||||
rc = metal_irq_unregister(tst_irq[2], 0, 0, (void *)2);
|
||||
if (!rc) {
|
||||
err_msg = "unregister irq 2 drv_id 2 success but fail expected\n";
|
||||
goto out;
|
||||
}
|
||||
rc = metal_irq_register(tst_irq[2], irq_handler, 0, (void *)2);
|
||||
if (rc) {
|
||||
err_msg = "register irq 2 fail drv_id 2\n";
|
||||
goto out;
|
||||
}
|
||||
rc = metal_irq_unregister(tst_irq[2], 0, 0, (void *)1);
|
||||
if (rc) {
|
||||
err_msg = "unregister irq 2 drv_id 1 failed \n";
|
||||
goto out;
|
||||
}
|
||||
rc = metal_irq_unregister(tst_irq[2], 0, 0, (void *)2);
|
||||
if (rc) {
|
||||
err_msg = "unregister irq 2 drv_id 2 failed \n";
|
||||
goto out;
|
||||
}
|
||||
|
||||
rc = metal_irq_register(tst_irq[3], irq_handler, 0, (void *)1);
|
||||
if (!rc) {
|
||||
err_msg = "register irq 3 drv_id 1 overwrite fail expected\n";
|
||||
goto out;
|
||||
}
|
||||
rc = metal_irq_register(tst_irq[3], irq_handler, 0, (void *)2);
|
||||
if (rc) {
|
||||
err_msg = "register irq 3 fail drv_id 2\n";
|
||||
goto out;
|
||||
}
|
||||
rc = metal_irq_unregister(tst_irq[3], irq_handler+1, 0, (void *)0);
|
||||
if (!rc) {
|
||||
err_msg = "unregister irq 3 match handler success but fail expected\n";
|
||||
goto out;
|
||||
}
|
||||
rc = metal_irq_unregister(tst_irq[3], irq_handler, 0, (void *)0);
|
||||
if (rc) {
|
||||
err_msg = "unregister irq 3 match handler failed \n";
|
||||
goto out;
|
||||
}
|
||||
|
||||
rc = metal_irq_unregister(tst_irq[4], irq_handler, 0, (void *)2);
|
||||
if (rc) {
|
||||
err_msg = "unregister irq 4 match handler and drv_id 2 failed \n";
|
||||
goto out;
|
||||
}
|
||||
rc = metal_irq_unregister(tst_irq[4], irq_handler, 0, (void *)1);
|
||||
if (rc) {
|
||||
err_msg = "unregister irq 4 match handler and drv_id 1 failed \n";
|
||||
goto out;
|
||||
}
|
||||
|
||||
rc = metal_irq_register(tst_irq[5], irq_handler, (void *)10, (void *)1);
|
||||
if (rc) {
|
||||
err_msg = "register irq 5 fail dev 10 drv_id 1\n";
|
||||
goto out;
|
||||
}
|
||||
rc = metal_irq_register(tst_irq[5], irq_handler, (void *)20, (void *)2);
|
||||
if (rc) {
|
||||
err_msg = "register irq 5 fail dev 20 drv_id 2\n";
|
||||
goto out;
|
||||
}
|
||||
rc = metal_irq_register(tst_irq[5], irq_handler, (void *)10, (void *)3);
|
||||
if (rc) {
|
||||
err_msg = "register irq 5 fail dev 10 drv_id 3\n";
|
||||
goto out;
|
||||
}
|
||||
rc = metal_irq_register(tst_irq[5], irq_handler, 0, (void *)4);
|
||||
if (rc) {
|
||||
err_msg = "register irq 5 fail drv_id 4\n";
|
||||
goto out;
|
||||
}
|
||||
rc = metal_irq_register(tst_irq[5], irq_handler, (void *)10, (void *)5);
|
||||
if (rc) {
|
||||
err_msg = "register irq 5 fail dev 10 drv_id 5\n";
|
||||
goto out;
|
||||
}
|
||||
|
||||
rc = metal_irq_unregister(tst_irq[5], irq_handler, (void *)10, (void *)3);
|
||||
if (rc) {
|
||||
err_msg = "unregister irq 5 match handle, dev 10 and drv_id 3 failed \n";
|
||||
goto out;
|
||||
}
|
||||
rc = metal_irq_unregister(tst_irq[5], 0, 0, (void *)4);
|
||||
if (rc) {
|
||||
err_msg = "unregister irq 5 drv_id 4 failed \n";
|
||||
goto out;
|
||||
}
|
||||
rc = metal_irq_unregister(tst_irq[5], 0, (void *)10, 0);
|
||||
if (rc) {
|
||||
err_msg = "unregister irq 5 dev 10 failed \n";
|
||||
goto out;
|
||||
}
|
||||
rc = metal_irq_unregister(tst_irq[5], 0, (void *)20, (void *)2);
|
||||
if (rc) {
|
||||
err_msg = "unregister irq 5 match dev 20 and drv_id 2 failed \n";
|
||||
goto out;
|
||||
}
|
||||
|
||||
rc = 0;
|
||||
|
||||
return 0;
|
||||
out:
|
||||
for (i=1; i < 6; i++) {
|
||||
for (i = 0; i < 2; i++) {
|
||||
close(tst_irq[i]);
|
||||
}
|
||||
metal_set_log_level(mll);
|
||||
|
||||
+15
-159
@@ -12,13 +12,13 @@
|
||||
#define METAL_INTERNAL
|
||||
|
||||
#include <metal/irq.h>
|
||||
#include <metal/list.h>
|
||||
#include <metal/log.h>
|
||||
#include <metal/sys.h>
|
||||
#include <metal/list.h>
|
||||
#include <metal/utilities.h>
|
||||
#include "metal-test-internal.h"
|
||||
|
||||
int irq_handler(int irq, void *priv)
|
||||
static int irq_handler(int irq, void *priv)
|
||||
{
|
||||
(void)irq;
|
||||
(void)priv;
|
||||
@@ -26,7 +26,7 @@ int irq_handler(int irq, void *priv)
|
||||
return 0;
|
||||
}
|
||||
|
||||
int irq_handler_1(int irq, void *priv)
|
||||
static int irq_handler2(int irq, void *priv)
|
||||
{
|
||||
(void)irq;
|
||||
(void)priv;
|
||||
@@ -36,7 +36,7 @@ int irq_handler_1(int irq, void *priv)
|
||||
|
||||
static int irq(void)
|
||||
{
|
||||
int rc = 0, flags_1, flags_2;
|
||||
int rc = 0;
|
||||
char *err_msg="";
|
||||
enum metal_log_level mll= metal_get_log_level();
|
||||
|
||||
@@ -45,174 +45,30 @@ static int irq(void)
|
||||
|
||||
rc = metal_irq_register(1, irq_handler, 0, (void *)1);
|
||||
if (rc) {
|
||||
err_msg = "register irq 1 fail drv_id 1\n";
|
||||
err_msg = "register irq 0 fail drv_id 1\n";
|
||||
goto out;
|
||||
}
|
||||
rc = metal_irq_register(2, irq_handler, 0, (void *)1);
|
||||
if (rc) {
|
||||
err_msg = "register irq 2 fail drv_id 1\n";
|
||||
err_msg = "register irq 1 fail drv_id 1\n";
|
||||
goto out;
|
||||
}
|
||||
rc = metal_irq_register(2, irq_handler, 0, (void *)2);
|
||||
if (rc) {
|
||||
err_msg = "register irq 2 fail drv_id 2\n";
|
||||
goto out;
|
||||
}
|
||||
rc = metal_irq_register(3, irq_handler, 0, (void *)1);
|
||||
if (rc) {
|
||||
err_msg = "register irq 3 fail drv_id 1\n";
|
||||
goto out;
|
||||
}
|
||||
rc = metal_irq_register(4, irq_handler, 0, (void *)1);
|
||||
if (rc) {
|
||||
err_msg = "register irq 4 fail drv_id 1\n";
|
||||
goto out;
|
||||
}
|
||||
rc = metal_irq_register(4, irq_handler, 0, (void *)2);
|
||||
if (rc) {
|
||||
err_msg = "register irq 4 fail drv_id 2\n";
|
||||
goto out;
|
||||
}
|
||||
rc = metal_irq_register(1, irq_handler, 0, (void *)2);
|
||||
if (rc) {
|
||||
err_msg = "register irq 1 fail drv_id 2\n";
|
||||
rc = metal_irq_register(2, irq_handler2, 0, (void *)2);
|
||||
if (rc == 0) {
|
||||
err_msg = "expect 2nd register irq 1 fail, but succeeded\n";
|
||||
goto out;
|
||||
}
|
||||
|
||||
rc = metal_irq_unregister(1, 0, 0, (void *)0);
|
||||
metal_irq_unregister(1);
|
||||
rc = metal_irq_register(1, irq_handler, 0, (void *)1);
|
||||
if (rc) {
|
||||
err_msg = "unregister irq 1 failed \n";
|
||||
goto out;
|
||||
}
|
||||
rc = metal_irq_unregister(1, 0, 0, (void *)0);
|
||||
if (!rc) {
|
||||
err_msg = "unregister irq 1 fail expected\n";
|
||||
err_msg = "register irq 0 after unregistering failed\n";
|
||||
goto out;
|
||||
}
|
||||
metal_irq_unregister(1);
|
||||
metal_irq_unregister(2);
|
||||
|
||||
rc = metal_irq_unregister(2, 0, 0, (void *)2);
|
||||
if (rc) {
|
||||
err_msg = "unregister irq 2 drv_id 2 failed \n";
|
||||
goto out;
|
||||
}
|
||||
rc = metal_irq_unregister(2, 0, 0, (void *)2);
|
||||
if (!rc) {
|
||||
err_msg = "unregister irq 2 drv_id 2 fail expected\n";
|
||||
goto out;
|
||||
}
|
||||
rc = metal_irq_register(2, irq_handler, 0, (void *)2);
|
||||
if (rc) {
|
||||
err_msg = "register irq 2 fail drv_id 2\n";
|
||||
goto out;
|
||||
}
|
||||
rc = metal_irq_unregister(2, 0, 0, (void *)1);
|
||||
if (rc) {
|
||||
err_msg = "unregister irq 2 drv_id 1 failed \n";
|
||||
goto out;
|
||||
}
|
||||
rc = metal_irq_unregister(2, 0, 0, (void *)2);
|
||||
if (rc) {
|
||||
err_msg = "unregister irq 2 drv_id 2 failed \n";
|
||||
goto out;
|
||||
}
|
||||
|
||||
rc = metal_irq_register(3, irq_handler, 0, (void *)1);
|
||||
if (!rc) {
|
||||
err_msg = "register irq 3 drv_id 1 overwrite fail expected\n";
|
||||
goto out;
|
||||
}
|
||||
rc = metal_irq_register(3, irq_handler, 0, (void *)2);
|
||||
if (rc) {
|
||||
err_msg = "register irq 3 fail drv_id 2\n";
|
||||
goto out;
|
||||
}
|
||||
rc = metal_irq_unregister(3, irq_handler_1, 0, (void *)0);
|
||||
if (!rc) {
|
||||
err_msg = "unregister irq 3 match handler fail expected\n";
|
||||
goto out;
|
||||
}
|
||||
rc = metal_irq_unregister(3, irq_handler, 0, (void *)0);
|
||||
if (rc) {
|
||||
err_msg = "unregister irq 3 match handler failed \n";
|
||||
goto out;
|
||||
}
|
||||
|
||||
rc = metal_irq_unregister(4, irq_handler, 0, (void *)2);
|
||||
if (rc) {
|
||||
err_msg = "unregister irq 4 match handler and drv_id 2 failed \n";
|
||||
goto out;
|
||||
}
|
||||
rc = metal_irq_unregister(4, irq_handler, 0, (void *)1);
|
||||
if (rc) {
|
||||
err_msg = "unregister irq 4 match handler and drv_id 1 failed \n";
|
||||
goto out;
|
||||
}
|
||||
|
||||
rc = metal_irq_register(5, irq_handler, (void *)10, (void *)1);
|
||||
if (rc) {
|
||||
err_msg = "register irq 5 fail dev 10 drv_id 1\n";
|
||||
goto out;
|
||||
}
|
||||
rc = metal_irq_register(5, irq_handler, (void *)20, (void *)2);
|
||||
if (rc) {
|
||||
err_msg = "register irq 5 fail dev 20 drv_id 2\n";
|
||||
goto out;
|
||||
}
|
||||
rc = metal_irq_register(5, irq_handler, (void *)10, (void *)3);
|
||||
if (rc) {
|
||||
err_msg = "register irq 5 fail dev 10 drv_id 3\n";
|
||||
goto out;
|
||||
}
|
||||
rc = metal_irq_register(5, irq_handler, 0, (void *)4);
|
||||
if (rc) {
|
||||
err_msg = "register irq 5 fail drv_id 4\n";
|
||||
goto out;
|
||||
}
|
||||
rc = metal_irq_register(5, irq_handler, (void *)10, (void *)5);
|
||||
if (rc) {
|
||||
err_msg = "register irq 5 fail dev 10 drv_id 5\n";
|
||||
goto out;
|
||||
}
|
||||
|
||||
rc = metal_irq_unregister(5, irq_handler, (void *)10, (void *)3);
|
||||
if (rc) {
|
||||
err_msg = "unregister irq 5 match handle, dev 10 and drv_id 3 failed \n";
|
||||
goto out;
|
||||
}
|
||||
rc = metal_irq_unregister(5, 0, 0, (void *)4);
|
||||
if (rc) {
|
||||
err_msg = "unregister irq 5 drv_id 4 failed \n";
|
||||
goto out;
|
||||
}
|
||||
rc = metal_irq_unregister(5, 0, (void *)10, 0);
|
||||
if (rc) {
|
||||
err_msg = "unregister irq 5 dev 10 failed \n";
|
||||
goto out;
|
||||
}
|
||||
rc = metal_irq_unregister(5, 0, (void *)20, (void *)2);
|
||||
if (rc) {
|
||||
err_msg = "unregister irq 5 match dev 20 and drv_id 2 failed \n";
|
||||
goto out;
|
||||
}
|
||||
|
||||
rc = metal_irq_register(-1, irq_handler, 0, (void *)1);
|
||||
if (!rc) {
|
||||
err_msg = "register irq -1 should have failed\n";
|
||||
goto out;
|
||||
}
|
||||
|
||||
/* global interrupt disable/enable normal behavior */
|
||||
flags_1=metal_irq_save_disable();
|
||||
metal_irq_restore_enable(flags_1);
|
||||
|
||||
/* global interrupt less common */
|
||||
flags_1=metal_irq_save_disable();
|
||||
flags_2=metal_irq_save_disable();
|
||||
metal_irq_restore_enable(flags_2);
|
||||
metal_irq_restore_enable(flags_1);
|
||||
|
||||
rc = 0;
|
||||
|
||||
return 0;
|
||||
out:
|
||||
metal_set_log_level(mll);
|
||||
if ((err_msg[0] != '\0') && (!rc))
|
||||
|
||||
Reference in New Issue
Block a user