summaryrefslogtreecommitdiff
path: root/drivers/s390/char/raw3270.c
diff options
context:
space:
mode:
authorSven Schnelle <svens@linux.ibm.com>2022-11-26 22:18:21 +0300
committerHeiko Carstens <hca@linux.ibm.com>2023-01-09 16:34:00 +0300
commitf77f936afe1ea9342725bff0bd0f7aaa54699794 (patch)
tree6b9b12c6dfde4f2f12ccac8524ba83c9e7756b8e /drivers/s390/char/raw3270.c
parentb2057c870231edce4105c9825f8e5e1f20aebabc (diff)
downloadlinux-f77f936afe1ea9342725bff0bd0f7aaa54699794.tar.xz
s390/raw3270: make raw3270_buffer_address() accept x/y coordinates
All callers of raw3270_buffer_address() are calculating the offset from some x/y coordinates. Move that calculation inside of the function, so user can pass the x/y values directly. Note that negative values are relative to the end-of-line or end-of-screen. 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/s390/char/raw3270.c')
-rw-r--r--drivers/s390/char/raw3270.c9
1 files changed, 8 insertions, 1 deletions
diff --git a/drivers/s390/char/raw3270.c b/drivers/s390/char/raw3270.c
index e2d703e8ad48..6f55a094ad3e 100644
--- a/drivers/s390/char/raw3270.c
+++ b/drivers/s390/char/raw3270.c
@@ -113,8 +113,15 @@ static inline int raw3270_state_ready(struct raw3270 *rp)
return rp->state == RAW3270_STATE_READY;
}
-void raw3270_buffer_address(struct raw3270 *rp, char *cp, unsigned short addr)
+void raw3270_buffer_address(struct raw3270 *rp, char *cp, int x, int y)
{
+ int addr;
+
+ if (x < 0)
+ x = max_t(int, 0, rp->view->cols + x);
+ if (y < 0)
+ y = max_t(int, 0, rp->view->rows + y);
+ addr = (y * rp->view->cols) + x;
if (test_bit(RAW3270_FLAGS_14BITADDR, &rp->flags)) {
cp[0] = (addr >> 8) & 0x3f;
cp[1] = addr & 0xff;