summaryrefslogtreecommitdiff
path: root/usr/src/uts/common/io/kbtrans/kbtrans_streams.c
diff options
context:
space:
mode:
authorToomas Soome <tsoome@me.com>2019-04-29 14:13:54 +0300
committerToomas Soome <tsoome@me.com>2019-05-16 22:36:52 +0300
commitc0423dd8ef7079a845a1aa3ceb20e565e815f97b (patch)
tree9f8888d60286b10060d1d3944782a08819ce398a /usr/src/uts/common/io/kbtrans/kbtrans_streams.c
parente3f3c0e614a8cd74d4212f4c7c616ed5b3cf00cb (diff)
downloadillumos-joyent-c0423dd8ef7079a845a1aa3ceb20e565e815f97b.tar.gz
10884 kbd: add option to limit autorepeat count, convert manual
Reviewed by: Peter Tribble <peter.tribble@gmail.com> Approved by: Dan McDonald <danmcd@joyent.com>
Diffstat (limited to 'usr/src/uts/common/io/kbtrans/kbtrans_streams.c')
-rw-r--r--usr/src/uts/common/io/kbtrans/kbtrans_streams.c37
1 files changed, 37 insertions, 0 deletions
diff --git a/usr/src/uts/common/io/kbtrans/kbtrans_streams.c b/usr/src/uts/common/io/kbtrans/kbtrans_streams.c
index d56b92954c..170eef268e 100644
--- a/usr/src/uts/common/io/kbtrans/kbtrans_streams.c
+++ b/usr/src/uts/common/io/kbtrans/kbtrans_streams.c
@@ -995,6 +995,43 @@ kbtrans_ioctl(struct kbtrans *upper, register mblk_t *mp)
*/
return (KBTRANS_MESSAGE_NOT_HANDLED);
+ case KIOCGRPTCOUNT:
+ /*
+ * Report the autorepeat count
+ */
+ DPRINTF(PRINT_L0, PRINT_MASK_ALL, (upper, "KIOCGRPTCOUNT\n"));
+ if ((datap = allocb(sizeof (int), BPRI_HI)) == NULL) {
+ ioctlrespsize = sizeof (int);
+ goto allocfailure;
+ }
+ *(int *)datap->b_wptr = kbtrans_repeat_count;
+ datap->b_wptr += sizeof (int);
+
+ /* free msg to prevent memory leak */
+ if (mp->b_cont != NULL)
+ freemsg(mp->b_cont);
+ mp->b_cont = datap;
+ iocp->ioc_count = sizeof (int);
+ break;
+
+ case KIOCSRPTCOUNT:
+ /*
+ * Set the autorepeat count
+ */
+ DPRINTF(PRINT_L0, PRINT_MASK_ALL, (upper, "KIOCSRPTCOUNT\n"));
+ err = miocpullup(mp, sizeof (int));
+
+ if (err != 0)
+ break;
+
+ /* validate the input */
+ if (*(int *)mp->b_cont->b_rptr < -1) {
+ err = EINVAL;
+ break;
+ }
+ kbtrans_repeat_count = (*(int *)mp->b_cont->b_rptr);
+ break;
+
case KIOCGRPTDELAY:
/*
* Report the autorepeat delay, unit in millisecond