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