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 <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 
     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 *);
    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