1 | /* |
2 | * Copyright 2021 Red Hat Inc. |
3 | * |
4 | * Permission is hereby granted, free of charge, to any person obtaining a |
5 | * copy of this software and associated documentation files (the "Software"), |
6 | * to deal in the Software without restriction, including without limitation |
7 | * the rights to use, copy, modify, merge, publish, distribute, sublicense, |
8 | * and/or sell copies of the Software, and to permit persons to whom the |
9 | * Software is furnished to do so, subject to the following conditions: |
10 | * |
11 | * The above copyright notice and this permission notice shall be included in |
12 | * all copies or substantial portions of the Software. |
13 | * |
14 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
15 | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
16 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL |
17 | * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR |
18 | * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, |
19 | * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR |
20 | * OTHER DEALINGS IN THE SOFTWARE. |
21 | */ |
22 | #include <nvif/event.h> |
23 | #include <nvif/printf.h> |
24 | |
25 | #include <nvif/class.h> |
26 | #include <nvif/if000e.h> |
27 | |
28 | int |
29 | nvif_event_block(struct nvif_event *event) |
30 | { |
31 | if (nvif_event_constructed(event)) { |
32 | int ret = nvif_mthd(&event->object, NVIF_EVENT_V0_BLOCK, NULL, 0); |
33 | NVIF_ERRON(ret, &event->object, "[BLOCK]" ); |
34 | return ret; |
35 | } |
36 | return 0; |
37 | } |
38 | |
39 | int |
40 | nvif_event_allow(struct nvif_event *event) |
41 | { |
42 | if (nvif_event_constructed(event)) { |
43 | int ret = nvif_mthd(&event->object, NVIF_EVENT_V0_ALLOW, NULL, 0); |
44 | NVIF_ERRON(ret, &event->object, "[ALLOW]" ); |
45 | return ret; |
46 | } |
47 | return 0; |
48 | } |
49 | |
50 | void |
51 | nvif_event_dtor(struct nvif_event *event) |
52 | { |
53 | nvif_object_dtor(&event->object); |
54 | } |
55 | |
56 | int |
57 | nvif_event_ctor_(struct nvif_object *parent, const char *name, u32 handle, nvif_event_func func, |
58 | bool wait, struct nvif_event_v0 *args, u32 argc, bool warn, |
59 | struct nvif_event *event) |
60 | { |
61 | struct nvif_event_v0 _args; |
62 | int ret; |
63 | |
64 | if (!args) { |
65 | args = &_args; |
66 | argc = sizeof(_args); |
67 | } |
68 | |
69 | args->version = 0; |
70 | args->wait = wait; |
71 | |
72 | ret = nvif_object_ctor(parent, name ?: "nvifEvent" , handle, |
73 | NVIF_CLASS_EVENT, args, argc, &event->object); |
74 | NVIF_ERRON(ret && warn, parent, "[NEW EVENT wait:%d size:%zd]" , |
75 | args->wait, argc - sizeof(*args)); |
76 | if (ret) |
77 | return ret; |
78 | |
79 | event->func = func; |
80 | return 0; |
81 | } |
82 | |