From 584ef7f14c8804b293c85cd111c6d381603d06a6 Mon Sep 17 00:00:00 2001 From: Chao-Ying Fu Date: Fri, 17 Aug 2012 17:11:23 -0700 Subject: [PATCH] Make sys/ioctl_compat.h portable. Change-Id: Id9c4c68c8422d46d463b9c987be180ea50c05099 --- .../android/libportable/arch-mips/ioctl.c | 41 +++++++++ .../common/include/ioctls_portable.h | 85 ++++++++++++++++++- 2 files changed, 124 insertions(+), 2 deletions(-) diff --git a/ndk/sources/android/libportable/arch-mips/ioctl.c b/ndk/sources/android/libportable/arch-mips/ioctl.c index 80a3bb7fc..0e4fa0704 100644 --- a/ndk/sources/android/libportable/arch-mips/ioctl.c +++ b/ndk/sources/android/libportable/arch-mips/ioctl.c @@ -154,6 +154,47 @@ static inline int mips_change_request(int request) return TIOCPKT_DOSTOP; /* case TIOCSER_TEMT_PORTABLE: // = 1 same as TIOCPKT_FLUSHREAD_PORTABLE return TIOCSER_TEMT; */ + case TIOCGPTN_PORTABLE: + return TIOCGPTN; + case TIOCSPTLCK_PORTABLE: + return TIOCSPTLCK; +#ifdef USE_OLD_TTY + case TIOCGETD_PORTABLE: + return TIOCGETD; + case TIOCSETD_PORTABLE: + return TIOCSETD; +#else + case OTIOCGETD_PORTABLE: + return OTIOCGETD; + case OTIOCSETD_PORTABLE: + return OTIOCSETD; +#endif + case TIOCHPCL_PORTABLE: + return TIOCHPCL; + case TIOCGETP_PORTABLE: + return TIOCGETP; + case TIOCSETP_PORTABLE: + return TIOCSETP; + case TIOCSETN_PORTABLE: + return TIOCSETN; + case TIOCSETC_PORTABLE: + return TIOCSETC; + case TIOCGETC_PORTABLE: + return TIOCGETC; + case TIOCLBIS_PORTABLE: + return TIOCLBIS; + case TIOCLBIC_PORTABLE: + return TIOCLBIC; + case TIOCLSET_PORTABLE: + return TIOCLSET; + case TIOCLGET_PORTABLE: + return TIOCLGET; + case TIOCSLTC_PORTABLE: + return TIOCSLTC; + case TIOCGLTC_PORTABLE: + return TIOCGLTC; + case OTIOCCONS_PORTABLE: + return OTIOCCONS; } return request; } diff --git a/ndk/sources/android/libportable/common/include/ioctls_portable.h b/ndk/sources/android/libportable/common/include/ioctls_portable.h index 16fef800c..43bb375f2 100644 --- a/ndk/sources/android/libportable/common/include/ioctls_portable.h +++ b/ndk/sources/android/libportable/common/include/ioctls_portable.h @@ -17,6 +17,37 @@ #ifndef _IOCTLS_PORTABLE_H_ #define _IOCTLS_PORTABLE_H_ +/* Derived from development/ndk/platforms/android-3/include/asm-generic/ioctl.h */ + +#define _IOC_NRBITS_PORTABLE 8 +#define _IOC_TYPEBITS_PORTABLE 8 +#define _IOC_SIZEBITS_PORTABLE 14 +#define _IOC_DIRBITS_PORTABLE 2 + +#define _IOC_NRMASK_PORTABLE ((1 << _IOC_NRBITS_PORTABLE)-1) +#define _IOC_TYPEMASK_PORTABLE ((1 << _IOC_TYPEBITS_PORTABLE)-1) +#define _IOC_SIZEMASK_PORTABLE ((1 << _IOC_SIZEBITS_PORTABLE)-1) +#define _IOC_DIRMASK_PORTABLE ((1 << _IOC_DIRBITS_PORTABLE)-1) + +#define _IOC_NRSHIFT_PORTABLE 0 +#define _IOC_TYPESHIFT_PORTABLE (_IOC_NRSHIFT_PORTABLE+_IOC_NRBITS_PORTABLE) +#define _IOC_SIZESHIFT_PORTABLE (_IOC_TYPESHIFT_PORTABLE+_IOC_TYPEBITS_PORTABLE) +#define _IOC_DIRSHIFT_PORTABLE (_IOC_SIZESHIFT_PORTABLE+_IOC_SIZEBITS_PORTABLE) + +#define _IOC_NONE_PORTABLE 0U +#define _IOC_WRITE_PORTABLE 1U +#define _IOC_READ_PORTABLE 2U + +#define _IOC_PORTABLE(dir,type,nr,size) (((dir) << _IOC_DIRSHIFT_PORTABLE) | ((type) << _IOC_TYPESHIFT_PORTABLE) | ((nr) << _IOC_NRSHIFT_PORTABLE) | ((size) << _IOC_SIZESHIFT_PORTABLE)) + +extern unsigned int __invalid_size_argument_for_IOC; +#define _IOC_TYPECHECK_PORTABLE(t) ((sizeof(t) == sizeof(t[1]) && sizeof(t) < (1 << _IOC_SIZEBITS_PORTABLE)) ? sizeof(t) : __invalid_size_argument_for_IOC) + +#define _IO_PORTABLE(type,nr) _IOC_PORTABLE(_IOC_NONE_PORTABLE,(type),(nr),0) +#define _IOR_PORTABLE(type,nr,size) _IOC_PORTABLE(_IOC_READ_PORTABLE,(type),(nr),(_IOC_TYPECHECK_PORTABLE(size))) +#define _IOW_PORTABLE(type,nr,size) _IOC_PORTABLE(_IOC_WRITE_PORTABLE,(type),(nr),(_IOC_TYPECHECK_PORTABLE(size))) +#define _IOWR_PORTABLE(type,nr,size) _IOC_PORTABLE(_IOC_READ_PORTABLE|_IOC_WRITE_PORTABLE,(type),(nr),(_IOC_TYPECHECK_PORTABLE(size))) + /* Derived from development/ndk/platforms/android-3/arch-arm/include/asm/ioctls.h */ #define TCGETS_PORTABLE 0x5401 @@ -60,8 +91,8 @@ #define TIOCSBRK_PORTABLE 0x5427 #define TIOCCBRK_PORTABLE 0x5428 #define TIOCGSID_PORTABLE 0x5429 -//#define TIOCGPTN _IOR('T',0x30, unsigned int) -//#define TIOCSPTLCK _IOW('T',0x31, int) +#define TIOCGPTN_PORTABLE _IOR_PORTABLE('T',0x30, unsigned int) +#define TIOCSPTLCK_PORTABLE _IOW_PORTABLE('T',0x31, int) #define FIONCLEX_PORTABLE 0x5450 #define FIOCLEX_PORTABLE 0x5451 @@ -90,4 +121,54 @@ #define TIOCSER_TEMT_PORTABLE 0x01 +/* Derived from development/ndk/platforms/android-3/include/sys/ioctl_compat.h */ + +struct tchars_portable { + char t_intrc; /* interrupt */ + char t_quitc; /* quit */ + char t_startc; /* start output */ + char t_stopc; /* stop output */ + char t_eofc; /* end-of-file */ + char t_brkc; /* input delimiter (like nl) */ +}; + +struct ltchars_portable { + char t_suspc; /* stop process signal */ + char t_dsuspc; /* delayed stop process signal */ + char t_rprntc; /* reprint line */ + char t_flushc; /* flush output (toggles) */ + char t_werasc; /* word erase */ + char t_lnextc; /* literal next character */ +}; + +struct sgttyb_portable { + char sg_ispeed; /* input speed */ + char sg_ospeed; /* output speed */ + char sg_erase; /* erase character */ + char sg_kill; /* kill character */ + short sg_flags; /* mode flags */ +}; + +#ifdef USE_OLD_TTY +# define TIOCGETD_PORTABLE _IOR_PORTABLE('t', 0, int) /* get line discipline */ +# define TIOCSETD_PORTABLE _IOW_PORTABLE('t', 1, int) /* set line discipline */ +#else +# define OTIOCGETD_PORTABLE _IOR_PORTABLE('t', 0, int) /* get line discipline */ +# define OTIOCSETD_PORTABLE _IOW_PORTABLE('t', 1, int) /* set line discipline */ +#endif +#define TIOCHPCL_PORTABLE _IO_PORTABLE('t', 2) /* hang up on last close */ +#define TIOCGETP_PORTABLE _IOR_PORTABLE('t', 8,struct sgttyb_portable)/* get parameters -- gtty */ +#define TIOCSETP_PORTABLE _IOW_PORTABLE('t', 9,struct sgttyb_portable)/* set parameters -- stty */ +#define TIOCSETN_PORTABLE _IOW_PORTABLE('t',10,struct sgttyb_portable)/* as above, but no flushtty*/ +#define TIOCSETC_PORTABLE _IOW_PORTABLE('t',17,struct tchars_portable)/* set special characters */ +#define TIOCGETC_PORTABLE _IOR_PORTABLE('t',18,struct tchars_portable)/* get special characters */ + +#define TIOCLBIS_PORTABLE _IOW_PORTABLE('t', 127, int) /* bis local mode bits */ +#define TIOCLBIC_PORTABLE _IOW_PORTABLE('t', 126, int) /* bic local mode bits */ +#define TIOCLSET_PORTABLE _IOW_PORTABLE('t', 125, int) /* set entire local mode word */ +#define TIOCLGET_PORTABLE _IOR_PORTABLE('t', 124, int) /* get local modes */ +#define TIOCSLTC_PORTABLE _IOW_PORTABLE('t',117,struct ltchars_portable)/* set local special chars*/ +#define TIOCGLTC_PORTABLE _IOR_PORTABLE('t',116,struct ltchars_portable)/* get local special chars*/ +#define OTIOCCONS_PORTABLE _IO_PORTABLE('t', 98) /* for hp300 -- sans int arg */ + #endif /* _IOCTLS_PORTABLE_H */