diff options
author | Peter Stuge <peter@stuge.se> | 2022-12-11 16:20:16 +0100 |
---|---|---|
committer | Thomas Heijligen <src@posteo.de> | 2023-02-16 17:29:58 +0000 |
commit | 03c36be3b6cd8666a63bfa8207a8123c49404a8d (patch) | |
tree | ab878c9ff01daa08f8693e8fa50834ea6e765f82 /custom_baud_darwin.c | |
parent | cd84b8de7664c3b278310c558521f8e94e3128e0 (diff) | |
download | flashrom-03c36be3b6cd8666a63bfa8207a8123c49404a8d.tar.gz flashrom-03c36be3b6cd8666a63bfa8207a8123c49404a8d.tar.bz2 flashrom-03c36be3b6cd8666a63bfa8207a8123c49404a8d.zip |
serial: Add Darwin/macOS support for custom and >230400 baudrates
This change is based on the patch proposed by Denis Ahrens in
https://review.coreboot.org/c/flashrom/+/67822
Change-Id: I3e6b88d2b4c2a130b16456752681fd9f807bf6f0
Signed-off-by: Peter Stuge <peter@stuge.se>
Reviewed-on: https://review.coreboot.org/c/flashrom/+/70571
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Reviewed-by: Thomas Heijligen <src@posteo.de>
Diffstat (limited to 'custom_baud_darwin.c')
-rw-r--r-- | custom_baud_darwin.c | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/custom_baud_darwin.c b/custom_baud_darwin.c new file mode 100644 index 000000000..e8764ddf5 --- /dev/null +++ b/custom_baud_darwin.c @@ -0,0 +1,61 @@ +/* + * This file is part of the flashrom project. + * + * Copyright (C) 2022 Peter Stuge <peter@stuge.se> + * + * 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 <termios.h> +#include <sys/ioctl.h> +#include <IOKit/serial/ioss.h> +#include <errno.h> + +#include "custom_baud.h" + +int use_custom_baud(unsigned int baud, const struct baudentry *baudtable) +{ + int i; + + if (baud > 230400) + return 1; + + for (i = 0; baudtable[i].baud; i++) { + if (baudtable[i].baud == baud) + return 0; + + if (baudtable[i].baud > baud) + return 1; + } + + return 1; +} + +int set_custom_baudrate(int fd, unsigned int baud, const enum custom_baud_stage stage, void *tio_wanted) +{ + struct termios *wanted; + speed_t speed; + + switch (stage) { + case BEFORE_FLAGS: + break; + + case WITH_FLAGS: + wanted = tio_wanted; + return cfsetspeed(wanted, B19200); + + case AFTER_FLAGS: + speed = baud; + return ioctl(fd, IOSSIOSPEED, &speed); + } + + return 0; +} |