Home | History | Annotate | Download | only in arch-mips
      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