diff options
author | Sven Schnelle <svens@linux.ibm.com> | 2022-11-28 21:24:15 +0300 |
---|---|---|
committer | Heiko Carstens <hca@linux.ibm.com> | 2023-01-09 16:33:56 +0300 |
commit | a21e962e129db40ae08af9fc80ea7babf3632d77 (patch) | |
tree | a4130e7f97754d547286e6a2d734fec25192b700 /drivers | |
parent | df386f15b2fbe51863d0f076d5939d5cbdb36f0d (diff) | |
download | linux-a21e962e129db40ae08af9fc80ea7babf3632d77.tar.xz |
s390/tty3270: add tty3270_create_view()
Will be used later for the console driver.
Signed-off-by: Sven Schnelle <svens@linux.ibm.com>
Acked-by: Heiko Carstens <hca@linux.ibm.com>
Tested-by: Niklas Schnelle <schnelle@linux.ibm.com>
Signed-off-by: Heiko Carstens <hca@linux.ibm.com>
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/s390/char/tty3270.c | 57 |
1 files changed, 33 insertions, 24 deletions
diff --git a/drivers/s390/char/tty3270.c b/drivers/s390/char/tty3270.c index 26e3995ac062..3ea5df58b64b 100644 --- a/drivers/s390/char/tty3270.c +++ b/drivers/s390/char/tty3270.c @@ -953,27 +953,14 @@ static struct raw3270_fn tty3270_fn = { .resize = tty3270_resize }; -/* - * This routine is called whenever a 3270 tty is opened first time. - */ -static int tty3270_install(struct tty_driver *driver, struct tty_struct *tty) +static int +tty3270_create_view(int index, struct tty3270 **newtp) { - struct raw3270_view *view; struct tty3270 *tp; int i, rc; - /* Check if the tty3270 is already there. */ - view = raw3270_find_view(&tty3270_fn, tty->index + RAW3270_FIRSTMINOR); - if (!IS_ERR(view)) { - tp = container_of(view, struct tty3270, view); - tty->driver_data = tp; - tty->winsize.ws_row = tp->view.rows - 2; - tty->winsize.ws_col = tp->view.cols; - tp->inattr = TF_INPUT; - goto port_install; - } - if (tty3270_max_index < tty->index + 1) - tty3270_max_index = tty->index + 1; + if (tty3270_max_index < index + 1) + tty3270_max_index = index + 1; /* Allocate tty3270 structure on first open. */ tp = tty3270_alloc_view(); @@ -981,7 +968,7 @@ static int tty3270_install(struct tty_driver *driver, struct tty_struct *tty) return PTR_ERR(tp); rc = raw3270_add_view(&tp->view, &tty3270_fn, - tty->index + RAW3270_FIRSTMINOR, + index + RAW3270_FIRSTMINOR, RAW3270_VIEW_LOCK_BH); if (rc) { tty3270_free_view(tp); @@ -997,9 +984,6 @@ static int tty3270_install(struct tty_driver *driver, struct tty_struct *tty) return rc; } - tty->winsize.ws_row = tp->view.rows - 2; - tty->winsize.ws_col = tp->view.cols; - tty3270_create_prompt(tp); tty3270_create_status(tp); tty3270_update_status(tp); @@ -1016,16 +1000,41 @@ static int tty3270_install(struct tty_driver *driver, struct tty_struct *tty) kbd_ascebc(tp->kbd, tp->view.ascebc); raw3270_activate_view(&tp->view); + raw3270_put_view(&tp->view); + *newtp = tp; + return 0; +} + +/* + * This routine is called whenever a 3270 tty is opened first time. + */ +static int +tty3270_install(struct tty_driver *driver, struct tty_struct *tty) +{ + struct raw3270_view *view; + struct tty3270 *tp; + int rc; -port_install: + /* Check if the tty3270 is already there. */ + view = raw3270_find_view(&tty3270_fn, tty->index + RAW3270_FIRSTMINOR); + if (IS_ERR(view)) { + rc = tty3270_create_view(tty->index, &tp); + if (rc) + return rc; + } else { + tp = container_of(view, struct tty3270, view); + tty->driver_data = tp; + tp->inattr = TF_INPUT; + } + + tty->winsize.ws_row = tp->view.rows - 2; + tty->winsize.ws_col = tp->view.cols; rc = tty_port_install(&tp->port, driver, tty); if (rc) { raw3270_put_view(&tp->view); return rc; } - tty->driver_data = tp; - return 0; } |