.. | .. |
---|
924 | 924 | |
---|
925 | 925 | return err; |
---|
926 | 926 | } |
---|
| 927 | + |
---|
| 928 | +static int sdei_api_interrupt_bind(u32 intr_num, u64 *result) |
---|
| 929 | +{ |
---|
| 930 | + return invoke_sdei_fn(SDEI_1_0_FN_SDEI_INTERRUPT_BIND, intr_num, 0, 0, 0, |
---|
| 931 | + 0, result); |
---|
| 932 | +} |
---|
| 933 | + |
---|
| 934 | +int sdei_interrupt_bind(u32 intr_num, u32 *event_num) |
---|
| 935 | +{ |
---|
| 936 | + int err; |
---|
| 937 | + u64 result; |
---|
| 938 | + |
---|
| 939 | + err = sdei_api_interrupt_bind(intr_num, &result); |
---|
| 940 | + if (!err) |
---|
| 941 | + *event_num = (u32)result; |
---|
| 942 | + |
---|
| 943 | + return err; |
---|
| 944 | +} |
---|
| 945 | + |
---|
| 946 | +static int sdei_api_interrupt_release(u32 event_num) |
---|
| 947 | +{ |
---|
| 948 | + return invoke_sdei_fn(SDEI_1_0_FN_SDEI_INTERRUPT_RELEASE, event_num, 0, 0, 0, |
---|
| 949 | + 0, NULL); |
---|
| 950 | +} |
---|
| 951 | + |
---|
| 952 | +int sdei_interrupt_release(u32 event_num) |
---|
| 953 | +{ |
---|
| 954 | + struct sdei_event *event; |
---|
| 955 | + |
---|
| 956 | + mutex_lock(&sdei_events_lock); |
---|
| 957 | + event = sdei_event_find(event_num); |
---|
| 958 | + mutex_unlock(&sdei_events_lock); |
---|
| 959 | + |
---|
| 960 | + if (event) { |
---|
| 961 | + pr_err("%s: need unregister event:%d before release\n", |
---|
| 962 | + __func__, event_num); |
---|
| 963 | + return SDEI_DENIED; |
---|
| 964 | + } |
---|
| 965 | + |
---|
| 966 | + return sdei_api_interrupt_release(event_num); |
---|
| 967 | +} |
---|
927 | 968 | #endif |
---|
928 | 969 | |
---|
929 | 970 | static int sdei_get_conduit(struct platform_device *pdev) |
---|