binder_module.h revision edbf3b6af777b721cd2a1ef461947e51e88241e1
1edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project/*
2edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * Copyright (C) 2008 The Android Open Source Project
3edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project *
4edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License");
5edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * you may not use this file except in compliance with the License.
6edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * You may obtain a copy of the License at
7edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project *
8edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project *      http://www.apache.org/licenses/LICENSE-2.0
9edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project *
10edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * Unless required by applicable law or agreed to in writing, software
11edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS,
12edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * See the License for the specific language governing permissions and
14edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * limitations under the License.
15edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project */
16edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
17edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#ifndef _BINDER_MODULE_H_
18edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#define _BINDER_MODULE_H_
19edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
20edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#ifdef __cplusplus
21edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectnamespace android {
22edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#endif
23edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
24edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#if defined(HAVE_ANDROID_OS)
25edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
26edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project/* obtain structures and constants from the kernel header */
27edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
28edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#include <sys/ioctl.h>
29edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#include <linux/binder.h>
30edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
31edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#else
32edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
33edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project/* Some parts of the simulator need fake versions of this
34edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * stuff in order to compile.  Really this should go away
35edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * entirely...
36edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project */
37edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
38edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#define BINDER_CURRENT_PROTOCOL_VERSION 7
39edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
40edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#define BINDER_TYPE_BINDER 1
41edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#define BINDER_TYPE_WEAK_BINDER 2
42edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#define BINDER_TYPE_HANDLE 3
43edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#define BINDER_TYPE_WEAK_HANDLE 4
44edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#define BINDER_TYPE_FD 5
45edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
46edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectstruct flat_binder_object {
47edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    unsigned long type;
48edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    unsigned long flags;
49edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    union {
50edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project        void *binder;
51edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project        signed long handle;
52edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    };
53edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    void *cookie;
54edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project};
55edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
56edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectstruct binder_write_read {
57edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    signed long write_size;
58edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    signed long write_consumed;
59edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    unsigned long write_buffer;
60edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    signed long read_size;
61edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    signed long read_consumed;
62edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    unsigned long read_buffer;
63edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project};
64edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
65edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectstruct binder_transaction_data {
66edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    union {
67edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project        size_t handle;
68edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project        void *ptr;
69edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    } target;
70edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    void *cookie;
71edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    unsigned int code;
72edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
73edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    unsigned int flags;
74edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    pid_t sender_pid;
75edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    uid_t sender_euid;
76edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    size_t data_size;
77edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    size_t offsets_size;
78edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
79edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    union {
80edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project        struct {
81edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project            const void *buffer;
82edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project            const void *offsets;
83edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project        } ptr;
84edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project        uint8_t buf[8];
85edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    } data;
86edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project};
87edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
88edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectenum transaction_flags {
89edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    TF_ONE_WAY = 0x01,
90edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    TF_ROOT_OBJECT = 0x04,
91edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    TF_STATUS_CODE = 0x08,
92edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    TF_ACCEPT_FDS = 0x10,
93edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project};
94edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
95edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
96edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectenum {
97edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    FLAT_BINDER_FLAG_PRIORITY_MASK = 0xff,
98edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    FLAT_BINDER_FLAG_ACCEPTS_FDS = 0x100,
99edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project};
100edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
101edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectenum BinderDriverReturnProtocol {
102edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    BR_ERROR,
103edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    BR_OK,
104edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    BR_TRANSACTION,
105edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    BR_REPLY,
106edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    BR_ACQUIRE_RESULT,
107edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    BR_DEAD_REPLY,
108edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    BR_TRANSACTION_COMPLETE,
109edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    BR_INCREFS,
110edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    BR_ACQUIRE,
111edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    BR_RELEASE,
112edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    BR_DECREFS,
113edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    BR_ATTEMPT_ACQUIRE,
114edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    BR_NOOP,
115edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    BR_SPAWN_LOOPER,
116edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    BR_FINISHED,
117edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    BR_DEAD_BINDER,
118edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    BR_CLEAR_DEATH_NOTIFICATION_DONE,
119edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    BR_FAILED_REPLY,
120edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project};
121edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
122edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectenum BinderDriverCommandProtocol {
123edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    BC_TRANSACTION,
124edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    BC_REPLY,
125edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    BC_ACQUIRE_RESULT,
126edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    BC_FREE_BUFFER,
127edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    BC_INCREFS,
128edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    BC_ACQUIRE,
129edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    BC_RELEASE,
130edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    BC_DECREFS,
131edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    BC_INCREFS_DONE,
132edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    BC_ACQUIRE_DONE,
133edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    BC_ATTEMPT_ACQUIRE,
134edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    BC_REGISTER_LOOPER,
135edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    BC_ENTER_LOOPER,
136edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    BC_EXIT_LOOPER,
137edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    BC_REQUEST_DEATH_NOTIFICATION,
138edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    BC_CLEAR_DEATH_NOTIFICATION,
139edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    BC_DEAD_BINDER_DONE,
140edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project};
141edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
142edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#endif
143edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
144edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#ifdef __cplusplus
145edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project}   // namespace android
146edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#endif
147edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
148edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#endif // _BINDER_MODULE_H_
149