1 /*
2 * Copyright 2012, 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 #include <portability.h>
18 #include <stdarg.h>
19 #include <sys/ioctl.h>
20 #include <ioctls_portable.h>
21 #include <termios.h>
22 #include <linux/sockios.h>
23
24 #if FIONREAD_PORTABLE==FIONREAD
25 #error Bad build environment
26 #endif
27
mips_change_request(int request)28 static inline int mips_change_request(int request)
29 {
30 switch(request) {
31 case TCGETS_PORTABLE:
32 return TCGETS;
33 case TCSETS_PORTABLE:
34 return TCSETS;
35 case TCSETSW_PORTABLE:
36 return TCSETSW;
37 case TCSETSF_PORTABLE:
38 return TCSETSF;
39 case TCGETA_PORTABLE:
40 return TCGETA;
41 case TCSETA_PORTABLE:
42 return TCSETA;
43 case TCSETAW_PORTABLE:
44 return TCSETAW;
45 case TCSETAF_PORTABLE:
46 return TCSETAF;
47 case TCSBRK_PORTABLE:
48 return TCSBRK;
49 case TCXONC_PORTABLE:
50 return TCXONC;
51 case TCFLSH_PORTABLE:
52 return TCFLSH;
53 case TIOCEXCL_PORTABLE:
54 return TIOCEXCL;
55 case TIOCNXCL_PORTABLE:
56 return TIOCNXCL;
57 case TIOCSCTTY_PORTABLE:
58 return TIOCSCTTY;
59 case TIOCGPGRP_PORTABLE:
60 return TIOCGPGRP;
61 case TIOCSPGRP_PORTABLE:
62 return TIOCSPGRP;
63 case TIOCOUTQ_PORTABLE:
64 return TIOCOUTQ;
65 case TIOCSTI_PORTABLE:
66 return TIOCSTI;
67 case TIOCGWINSZ_PORTABLE:
68 return TIOCGWINSZ;
69 case TIOCSWINSZ_PORTABLE:
70 return TIOCSWINSZ;
71 case TIOCMGET_PORTABLE:
72 return TIOCMGET;
73 case TIOCMBIS_PORTABLE:
74 return TIOCMBIS;
75 case TIOCMBIC_PORTABLE:
76 return TIOCMBIC;
77 case TIOCMSET_PORTABLE:
78 return TIOCMSET;
79 case TIOCGSOFTCAR_PORTABLE:
80 return TIOCGSOFTCAR;
81 case TIOCSSOFTCAR_PORTABLE:
82 return TIOCSSOFTCAR;
83 case FIONREAD_PORTABLE:
84 return FIONREAD;
85 /* case TIOCINQ_PORTABLE: // same as FIONREAD_PORTABLE
86 return TIOCINQ; */
87 case TIOCLINUX_PORTABLE:
88 return TIOCLINUX;
89 case TIOCCONS_PORTABLE:
90 return TIOCCONS;
91 case TIOCGSERIAL_PORTABLE:
92 return TIOCGSERIAL;
93 case TIOCSSERIAL_PORTABLE:
94 return TIOCSSERIAL;
95 case TIOCPKT_PORTABLE:
96 return TIOCPKT;
97 case FIONBIO_PORTABLE:
98 return FIONBIO;
99 case TIOCNOTTY_PORTABLE:
100 return TIOCNOTTY;
101 case TIOCSETD_PORTABLE:
102 return TIOCSETD;
103 case TIOCGETD_PORTABLE:
104 return TIOCGETD;
105 case TCSBRKP_PORTABLE:
106 return TCSBRKP;
107 case TIOCSBRK_PORTABLE:
108 return TIOCSBRK;
109 case TIOCCBRK_PORTABLE:
110 return TIOCCBRK;
111 case TIOCGSID_PORTABLE:
112 return TIOCGSID;
113 case FIONCLEX_PORTABLE:
114 return FIONCLEX;
115 case FIOCLEX_PORTABLE:
116 return FIOCLEX;
117 case FIOASYNC_PORTABLE:
118 return FIOASYNC;
119 case TIOCSERCONFIG_PORTABLE:
120 return TIOCSERCONFIG;
121 case TIOCSERGWILD_PORTABLE:
122 return TIOCSERGWILD;
123 case TIOCSERSWILD_PORTABLE:
124 return TIOCSERSWILD;
125 case TIOCGLCKTRMIOS_PORTABLE:
126 return TIOCGLCKTRMIOS;
127 case TIOCSLCKTRMIOS_PORTABLE:
128 return TIOCSLCKTRMIOS;
129 case TIOCSERGSTRUCT_PORTABLE:
130 return TIOCSERGSTRUCT;
131 case TIOCSERGETLSR_PORTABLE:
132 return TIOCSERGETLSR;
133 case TIOCSERGETMULTI_PORTABLE:
134 return TIOCSERGETMULTI;
135 case TIOCSERSETMULTI_PORTABLE:
136 return TIOCSERSETMULTI;
137 case TIOCMIWAIT_PORTABLE:
138 return TIOCMIWAIT;
139 case TIOCGICOUNT_PORTABLE:
140 return TIOCGICOUNT;
141 case FIOQSIZE_PORTABLE:
142 return FIOQSIZE;
143 case TIOCPKT_DATA_PORTABLE:
144 return TIOCPKT_DATA;
145 case TIOCPKT_FLUSHREAD_PORTABLE:
146 return TIOCPKT_FLUSHREAD;
147 case TIOCPKT_FLUSHWRITE_PORTABLE:
148 return TIOCPKT_FLUSHWRITE;
149 case TIOCPKT_STOP_PORTABLE:
150 return TIOCPKT_STOP;
151 case TIOCPKT_START_PORTABLE:
152 return TIOCPKT_START;
153 case TIOCPKT_NOSTOP_PORTABLE:
154 return TIOCPKT_NOSTOP;
155 case TIOCPKT_DOSTOP_PORTABLE:
156 return TIOCPKT_DOSTOP;
157 /* case TIOCSER_TEMT_PORTABLE: // = 1 same as TIOCPKT_FLUSHREAD_PORTABLE
158 return TIOCSER_TEMT; */
159 case TIOCGPTN_PORTABLE:
160 return TIOCGPTN;
161 case TIOCSPTLCK_PORTABLE:
162 return TIOCSPTLCK;
163 #ifdef USE_OLD_TTY
164 case TIOCGETD_PORTABLE:
165 return TIOCGETD;
166 case TIOCSETD_PORTABLE:
167 return TIOCSETD;
168 #else
169 case OTIOCGETD_PORTABLE:
170 return OTIOCGETD;
171 case OTIOCSETD_PORTABLE:
172 return OTIOCSETD;
173 #endif
174 case TIOCHPCL_PORTABLE:
175 return TIOCHPCL;
176 case TIOCGETP_PORTABLE:
177 return TIOCGETP;
178 case TIOCSETP_PORTABLE:
179 return TIOCSETP;
180 case TIOCSETN_PORTABLE:
181 return TIOCSETN;
182 case TIOCSETC_PORTABLE:
183 return TIOCSETC;
184 case TIOCGETC_PORTABLE:
185 return TIOCGETC;
186 case TIOCLBIS_PORTABLE:
187 return TIOCLBIS;
188 case TIOCLBIC_PORTABLE:
189 return TIOCLBIC;
190 case TIOCLSET_PORTABLE:
191 return TIOCLSET;
192 case TIOCLGET_PORTABLE:
193 return TIOCLGET;
194 case TIOCSLTC_PORTABLE:
195 return TIOCSLTC;
196 case TIOCGLTC_PORTABLE:
197 return TIOCGLTC;
198 case OTIOCCONS_PORTABLE:
199 return OTIOCCONS;
200 case FIOSETOWN_PORTABLE:
201 return FIOSETOWN;
202 case SIOCSPGRP_PORTABLE:
203 return SIOCSPGRP;
204 case FIOGETOWN_PORTABLE:
205 return FIOGETOWN;
206 case SIOCGPGRP_PORTABLE:
207 return SIOCGPGRP;
208 case SIOCATMARK_PORTABLE:
209 return SIOCATMARK;
210 case SIOCGSTAMP_PORTABLE:
211 return SIOCGSTAMP;
212 }
213 return request;
214 }
215
216 extern int __ioctl(int, int, void *);
WRAP(ioctl)217 int WRAP(ioctl)(int fd, int request, ...)
218 {
219 va_list ap;
220 void * arg;
221
222 va_start(ap, request);
223 arg = va_arg(ap, void *);
224 va_end(ap);
225
226 return __ioctl(fd, mips_change_request(request), arg);
227 }
228