xref: /aosp_15_r20/external/llvm-libc/src/termios/linux/kernel_termios.h (revision 71db0c75aadcf003ffe3238005f61d7618a3fead)
1 //===-- Definition of kernel's version of struct termios --------*- C++ -*-===//
2 //
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6 //
7 //===----------------------------------------------------------------------===//
8 
9 #ifndef LLVM_LIBC_SRC_TERMIOS_LINUX_KERNEL_TERMIOS_H
10 #define LLVM_LIBC_SRC_TERMIOS_LINUX_KERNEL_TERMIOS_H
11 
12 #include "src/__support/macros/config.h"
13 #include <stddef.h>
14 #include <termios.h>
15 
16 namespace LIBC_NAMESPACE_DECL {
17 
18 // The kernel's struct termios is different from the libc's struct termios. The
19 // kernel's syscalls expect the size and layout of its definition of struct
20 // termios. So, we define a flavor of struct termios which matches that of the
21 // kernel so that we can translate between the libc version and the kernel
22 // version when passing struct termios objects to syscalls.
23 
24 // NOTE: The definitions here are generic definitions valid for most target
25 // architectures including x86_64 and aarch64. Definitions on some architectures
26 // deviate from these generic definitions. Adjustments have to be made for those
27 // architectures.
28 
29 constexpr size_t KERNEL_NCCS = 19;
30 
31 struct kernel_termios {
32   tcflag_t c_iflag;
33   tcflag_t c_oflag;
34   tcflag_t c_cflag;
35   tcflag_t c_lflag;
36   cc_t c_line;
37   cc_t c_cc[KERNEL_NCCS];
38 };
39 
40 } // namespace LIBC_NAMESPACE_DECL
41 
42 #endif // LLVM_LIBC_SRC_TERMIOS_LINUX_KERNEL_TERMIOS_H
43