From 29ff205e6f10895cd6c53678398b962eb18694d2 Mon Sep 17 00:00:00 2001 From: Thomas Heijligen Date: Mon, 27 Sep 2021 15:12:26 +0200 Subject: custom_baud: move Linux specific code into own file Handle system specific code in an own file like i2c_helper_linux.c. The build system decides when to build it. Change-Id: I0744e769dcc6000483e7256105903a87e927ee77 Signed-off-by: Thomas Heijligen Reviewed-on: https://review.coreboot.org/c/flashrom/+/57990 Tested-by: build bot (Jenkins) Reviewed-by: Nico Huber --- custom_baud_linux.c | 56 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 custom_baud_linux.c (limited to 'custom_baud_linux.c') diff --git a/custom_baud_linux.c b/custom_baud_linux.c new file mode 100644 index 00000000..2d5f261d --- /dev/null +++ b/custom_baud_linux.c @@ -0,0 +1,56 @@ +/* + * This file is part of the flashrom project. + * + * Copyright (C) 2017 Urja Rannikko + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + */ + +#include +#include +#include +#include + +#include "custom_baud.h" + +/* + * This include hell above is why this is in a separate source file. See eg. + * https://www.downtowndougbrown.com/2013/11/linux-custom-serial-baud-rates/ + * https://stackoverflow.com/questions/12646324/how-to-set-a-custom-baud-rate-on-linux + * https://github.com/jbkim/Linux-custom-baud-rate + * for more info. + */ + +int set_custom_baudrate(int fd, unsigned int baud) +{ + struct termios2 tio; + if (ioctl(fd, TCGETS2, &tio)) { + return -1; + } + tio.c_cflag &= ~CBAUD; + tio.c_cflag |= BOTHER; + tio.c_ispeed = baud; + tio.c_ospeed = baud; + return ioctl(fd, TCSETS2, &tio); +} + +int use_custom_baud(unsigned int baud, const struct baudentry *baudtable) +{ + int i; + for (i = 0; baudtable[i].baud; i++) { + if (baudtable[i].baud == baud) + return 0; + + if (baudtable[i].baud > baud) + return 1; + } + return 1; +} -- cgit v1.2.3