1 /* 2 * CDDL HEADER START 3 * 4 * The contents of this file are subject to the terms of the 5 * Common Development and Distribution License (the "License"). 6 * You may not use this file except in compliance with the License. 7 * 8 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 9 * or http://www.opensolaris.org/os/licensing. 10 * See the License for the specific language governing permissions 11 * and limitations under the License. 12 * 13 * When distributing Covered Code, include this CDDL HEADER in each 14 * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 15 * If applicable, add the following below this CDDL HEADER, with the 16 * fields enclosed by brackets "[]" replaced with your own identifying 17 * information: Portions Copyright [yyyy] [name of copyright owner] 18 * 19 * CDDL HEADER END 20 */ 21 /* 22 * Copyright 2006 Sun Microsystems, Inc. All rights reserved. 23 * Use is subject to license terms. 24 */ 25 26 #ifndef _SYS_LDLINUX_H 27 #define _SYS_LDLINUX_H 28 29 #pragma ident "%Z%%M% %I% %E% SMI" 30 31 /* 32 * The ldlinux streams module is only intended for use in lx branded zones. 33 * This streams module implements the following ioctls: 34 * TIOCSETLD and TIOCGETLD 35 * 36 * These ioctls are special ioctls supported only by the ldlinux streams 37 * module and invoked only by the lx brand emulation library. These ioctls 38 * do not exist on native Linux systems. 39 * 40 * The TIOCSETLD ioctl is used when emulating the following Linux ioctls: 41 * TCSETS/TCSETSW/TCSETSF 42 * TCSETA/TCSETAW/TCSETAF 43 * 44 * The TIOCGETLD ioctl is used when emulating the following Linux ioctls: 45 * TCGETS/TCGETA 46 * 47 * This module is needed to emulate these ioctls because the following arrays: 48 * termio.c_cc 49 * termios.c_cc 50 * which are parameters for the following ioctls: 51 * TCSETS/TCSETSW/TCSETSF 52 * TCSETA/TCSETAW/TCSETAF 53 * TCGETS/TCGETA 54 * 55 * are defined differently on Solaris and Linux. 56 * 57 * According to the termio(7I) man page on Solaris the following is true of 58 * the members of the c_cc array: 59 * The VMIN element is the same element as the VEOF element. 60 * The VTIME element is the same element as the VEOL element. 61 * 62 * But on Linux the termios(3) man page states: 63 * These symbolic subscript values are all different, except that 64 * VTIME, VMIN may have the same value as VEOL, VEOF, respectively. 65 * 66 * While the man page indicates that these values may be the same empirical 67 * tests shows them to be different. Since these values are different on 68 * Linux systems it's possible that applications could set the members of 69 * the c_cc array to different values and then later expect to be able to 70 * read back those same separate values. The ldlinux module exists to provide 71 * a per-stream storage area where the lx_brand emulation library can save 72 * these values. The values are set and retrieved via the TIOCSETLD and 73 * TIOCGETLD ioctls respectively. 74 */ 75 76 #include <sys/termios.h> 77 78 #ifdef __cplusplus 79 extern "C" { 80 #endif 81 82 #define LDLINUX_MOD "ldlinux" 83 84 #ifdef _KERNEL 85 86 /* 87 * LDLINUX_MODID - This should be a unique number associated with 88 * this particular module. Unfortunatly there is no authority responsible 89 * for administering this name space, hence there's no real guarantee that 90 * whatever number we choose will be unique. Luckily, this constant 91 * is not really used anywhere by the system. It is used by some 92 * kernel subsystems to check for the presence of certain streams 93 * modules with known id vaules. Since no other kernel subsystem 94 * checks for the presence of this module we'll just set the id to 0. 95 */ 96 #define LDLINUX_MODID 0 97 98 struct ldlinux { 99 int state; /* state information */ 100 /* Linux expects the next four c_cc values */ 101 /* to be distinct, whereas solaris (legally) */ 102 /* overlaps their storage */ 103 unsigned char veof; /* veof value */ 104 unsigned char veol; /* veol value */ 105 unsigned char vmin; /* vmin value */ 106 unsigned char vtime; /* vtime value */ 107 }; 108 109 #define ISPTSTTY 0x01 110 111 #endif /* _KERNEL */ 112 113 #ifdef __cplusplus 114 } 115 #endif 116 117 #endif /* _SYS_LDLINUX_H */