hc
2023-11-06 e3e12f52b214121840b44c91de5b3e5af5d3eb84
kernel/drivers/firmware/arm_sdei.c
....@@ -924,6 +924,47 @@
924924
925925 return err;
926926 }
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
+}
927968 #endif
928969
929970 static int sdei_get_conduit(struct platform_device *pdev)