1 /*
2  * Copyright (C) 2008 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 #ifndef _BINDER_MODULE_H_
18 #define _BINDER_MODULE_H_
19 
20 #ifdef __cplusplus
21 namespace android {
22 #endif
23 
24 /* obtain structures and constants from the kernel header */
25 
26 // TODO(b/31559095): bionic on host
27 #ifndef __ANDROID__
28 #define __packed __attribute__((__packed__))
29 #endif
30 
31 // TODO(b/31559095): bionic on host
32 #if defined(B_PACK_CHARS) && !defined(_UAPI_LINUX_BINDER_H)
33 #undef B_PACK_CHARS
34 #endif
35 
36 #include <sys/ioctl.h>
37 #include <linux/android/binder.h>
38 
39 #ifndef BR_FROZEN_REPLY
40 // Temporary definition of BR_FROZEN_REPLY. For production
41 // this will come from UAPI binder.h
42 #define BR_FROZEN_REPLY _IO('r', 18)
43 #endif //BR_FROZEN_REPLY
44 
45 #ifndef BINDER_FREEZE
46 /*
47  * Temporary definitions for freeze support. For the final version
48  * these will be defined in the UAPI binder.h file from upstream kernel.
49  */
50 #define BINDER_FREEZE _IOW('b', 14, struct binder_freeze_info)
51 
52 struct binder_freeze_info {
53     //
54     // Group-leader PID of process to be frozen
55     //
56     uint32_t            pid;
57     //
58     // Enable(1) / Disable(0) freeze for given PID
59     //
60     uint32_t            enable;
61     //
62     // Timeout to wait for transactions to drain.
63     // 0: don't wait (ioctl will return EAGAIN if not drained)
64     // N: number of ms to wait
65     uint32_t            timeout_ms;
66 };
67 #endif //BINDER_FREEZE
68 
69 #ifndef BINDER_GET_FROZEN_INFO
70 
71 #define BINDER_GET_FROZEN_INFO          _IOWR('b', 15, struct binder_frozen_status_info)
72 
73 struct binder_frozen_status_info {
74     //
75     // Group-leader PID of process to be queried
76     //
77     __u32            pid;
78     //
79     // Indicates whether the process has received any sync calls since last
80     // freeze (cleared at freeze/unfreeze)
81     //
82     __u32            sync_recv;
83     //
84     // Indicates whether the process has received any async calls since last
85     // freeze (cleared at freeze/unfreeze)
86     //
87     __u32            async_recv;
88 };
89 #endif //BINDER_GET_FROZEN_INFO
90 
91 
92 
93 #ifdef __cplusplus
94 }   // namespace android
95 #endif
96 
97 #endif // _BINDER_MODULE_H_
98