_IO*() is the proper way of defining ioctl numbers. All these vt numbers
were synthetically built up the same way the _IO() macro does.
So instead of implicit hex numbers, use _IO() properly.
To not change the pre-existing numbers, use only _IO() (and not _IOR()
or _IOW()). The latter would change the numbers indeed.
Objdump of vt_ioctl.o reveals no difference with this patch.
Again, VT_GETCONSIZECSRPOS already uses _IOR(), so everything is paved
for this patch.
Signed-off-by: Jiri Slaby (SUSE) <jirislaby@kernel.org>
Cc: Nicolas Pitre <nico@fluxnic.net>
---
include/uapi/linux/vt.h | 34 +++++++++++++++++-----------------
1 file changed, 17 insertions(+), 17 deletions(-)
diff --git a/include/uapi/linux/vt.h b/include/uapi/linux/vt.h
index 714483d68c69..b60fcdfb2746 100644
--- a/include/uapi/linux/vt.h
+++ b/include/uapi/linux/vt.h
@@ -14,9 +14,9 @@
/* Note: the ioctl VT_GETSTATE does not work for
consoles 16 and higher (since it returns a short) */
-/* 0x56 is 'V', to avoid collision with termios and kd */
+/* 'V' to avoid collision with termios and kd */
-#define VT_OPENQRY 0x5600 /* find available vt */
+#define VT_OPENQRY _IO('V', 0x00) /* find available vt */
struct vt_mode {
__u8 mode; /* vt mode */
@@ -25,8 +25,8 @@ struct vt_mode {
__s16 acqsig; /* signal to raise on acquisition */
__s16 frsig; /* unused (set to 0) */
};
-#define VT_GETMODE 0x5601 /* get mode of active vt */
-#define VT_SETMODE 0x5602 /* set mode of active vt */
+#define VT_GETMODE _IO('V', 0x01) /* get mode of active vt */
+#define VT_SETMODE _IO('V', 0x02) /* set mode of active vt */
#define VT_AUTO 0x00 /* auto vt switching */
#define VT_PROCESS 0x01 /* process controls switching */
#define VT_ACKACQ 0x02 /* acknowledge switch */
@@ -36,21 +36,21 @@ struct vt_stat {
__u16 v_signal; /* signal to send */
__u16 v_state; /* vt bitmask */
};
-#define VT_GETSTATE 0x5603 /* get global vt state info */
-#define VT_SENDSIG 0x5604 /* signal to send to bitmask of vts */
+#define VT_GETSTATE _IO('V', 0x03) /* get global vt state info */
+#define VT_SENDSIG _IO('V', 0x04) /* signal to send to bitmask of vts */
-#define VT_RELDISP 0x5605 /* release display */
+#define VT_RELDISP _IO('V', 0x05) /* release display */
-#define VT_ACTIVATE 0x5606 /* make vt active */
-#define VT_WAITACTIVE 0x5607 /* wait for vt active */
-#define VT_DISALLOCATE 0x5608 /* free memory associated to vt */
+#define VT_ACTIVATE _IO('V', 0x06) /* make vt active */
+#define VT_WAITACTIVE _IO('V', 0x07) /* wait for vt active */
+#define VT_DISALLOCATE _IO('V', 0x08) /* free memory associated to vt */
struct vt_sizes {
__u16 v_rows; /* number of rows */
__u16 v_cols; /* number of columns */
__u16 v_scrollsize; /* number of lines of scrollback */
};
-#define VT_RESIZE 0x5609 /* set kernel's idea of screensize */
+#define VT_RESIZE _IO('V', 0x09) /* set kernel's idea of screensize */
struct vt_consize {
__u16 v_rows; /* number of rows */
@@ -60,10 +60,10 @@ struct vt_consize {
__u16 v_vcol; /* number of pixel columns on screen */
__u16 v_ccol; /* number of pixel columns per character */
};
-#define VT_RESIZEX 0x560A /* set kernel's idea of screensize + more */
-#define VT_LOCKSWITCH 0x560B /* disallow vt switching */
-#define VT_UNLOCKSWITCH 0x560C /* allow vt switching */
-#define VT_GETHIFONTMASK 0x560D /* return hi font mask */
+#define VT_RESIZEX _IO('V', 0x0A) /* set kernel's idea of screensize + more */
+#define VT_LOCKSWITCH _IO('V', 0x0B) /* disallow vt switching */
+#define VT_UNLOCKSWITCH _IO('V', 0x0C) /* allow vt switching */
+#define VT_GETHIFONTMASK _IO('V', 0x0D) /* return hi font mask */
struct vt_event {
__u32 event;
@@ -77,14 +77,14 @@ struct vt_event {
__u32 pad[4]; /* Padding for expansion */
};
-#define VT_WAITEVENT 0x560E /* Wait for an event */
+#define VT_WAITEVENT _IO('V', 0x0E) /* Wait for an event */
struct vt_setactivate {
__u32 console;
struct vt_mode mode;
};
-#define VT_SETACTIVATE 0x560F /* Activate and set the mode of a console */
+#define VT_SETACTIVATE _IO('V', 0x0F) /* Activate and set the mode of a console */
/* get console size and cursor position */
struct vt_consizecsrpos {
--
2.49.0
Hi Jiri, Le 11/06/2025 à 12:02, Jiri Slaby (SUSE) a écrit : > _IO*() is the proper way of defining ioctl numbers. All these vt numbers > were synthetically built up the same way the _IO() macro does. > > So instead of implicit hex numbers, use _IO() properly. > > To not change the pre-existing numbers, use only _IO() (and not _IOR() > or _IOW()). The latter would change the numbers indeed. On powerpc your assumption is wrong, because _IOC_NONE is not 0: $ git grep _IOC_NONE arch/powerpc/ arch/powerpc/include/uapi/asm/ioctl.h:#define _IOC_NONE 1U Therefore the value changes even with _IO(), leading to failure of Xorg as reported by Christian. Christophe > > Objdump of vt_ioctl.o reveals no difference with this patch. > > Again, VT_GETCONSIZECSRPOS already uses _IOR(), so everything is paved > for this patch. > > Signed-off-by: Jiri Slaby (SUSE) <jirislaby@kernel.org> > Cc: Nicolas Pitre <nico@fluxnic.net> > --- > include/uapi/linux/vt.h | 34 +++++++++++++++++----------------- > 1 file changed, 17 insertions(+), 17 deletions(-) > > diff --git a/include/uapi/linux/vt.h b/include/uapi/linux/vt.h > index 714483d68c69..b60fcdfb2746 100644 > --- a/include/uapi/linux/vt.h > +++ b/include/uapi/linux/vt.h > @@ -14,9 +14,9 @@ > /* Note: the ioctl VT_GETSTATE does not work for > consoles 16 and higher (since it returns a short) */ > > -/* 0x56 is 'V', to avoid collision with termios and kd */ > +/* 'V' to avoid collision with termios and kd */ > > -#define VT_OPENQRY 0x5600 /* find available vt */ > +#define VT_OPENQRY _IO('V', 0x00) /* find available vt */ > > struct vt_mode { > __u8 mode; /* vt mode */ > @@ -25,8 +25,8 @@ struct vt_mode { > __s16 acqsig; /* signal to raise on acquisition */ > __s16 frsig; /* unused (set to 0) */ > }; > -#define VT_GETMODE 0x5601 /* get mode of active vt */ > -#define VT_SETMODE 0x5602 /* set mode of active vt */ > +#define VT_GETMODE _IO('V', 0x01) /* get mode of active vt */ > +#define VT_SETMODE _IO('V', 0x02) /* set mode of active vt */ > #define VT_AUTO 0x00 /* auto vt switching */ > #define VT_PROCESS 0x01 /* process controls switching */ > #define VT_ACKACQ 0x02 /* acknowledge switch */ > @@ -36,21 +36,21 @@ struct vt_stat { > __u16 v_signal; /* signal to send */ > __u16 v_state; /* vt bitmask */ > }; > -#define VT_GETSTATE 0x5603 /* get global vt state info */ > -#define VT_SENDSIG 0x5604 /* signal to send to bitmask of vts */ > +#define VT_GETSTATE _IO('V', 0x03) /* get global vt state info */ > +#define VT_SENDSIG _IO('V', 0x04) /* signal to send to bitmask of vts */ > > -#define VT_RELDISP 0x5605 /* release display */ > +#define VT_RELDISP _IO('V', 0x05) /* release display */ > > -#define VT_ACTIVATE 0x5606 /* make vt active */ > -#define VT_WAITACTIVE 0x5607 /* wait for vt active */ > -#define VT_DISALLOCATE 0x5608 /* free memory associated to vt */ > +#define VT_ACTIVATE _IO('V', 0x06) /* make vt active */ > +#define VT_WAITACTIVE _IO('V', 0x07) /* wait for vt active */ > +#define VT_DISALLOCATE _IO('V', 0x08) /* free memory associated to vt */ > > struct vt_sizes { > __u16 v_rows; /* number of rows */ > __u16 v_cols; /* number of columns */ > __u16 v_scrollsize; /* number of lines of scrollback */ > }; > -#define VT_RESIZE 0x5609 /* set kernel's idea of screensize */ > +#define VT_RESIZE _IO('V', 0x09) /* set kernel's idea of screensize */ > > struct vt_consize { > __u16 v_rows; /* number of rows */ > @@ -60,10 +60,10 @@ struct vt_consize { > __u16 v_vcol; /* number of pixel columns on screen */ > __u16 v_ccol; /* number of pixel columns per character */ > }; > -#define VT_RESIZEX 0x560A /* set kernel's idea of screensize + more */ > -#define VT_LOCKSWITCH 0x560B /* disallow vt switching */ > -#define VT_UNLOCKSWITCH 0x560C /* allow vt switching */ > -#define VT_GETHIFONTMASK 0x560D /* return hi font mask */ > +#define VT_RESIZEX _IO('V', 0x0A) /* set kernel's idea of screensize + more */ > +#define VT_LOCKSWITCH _IO('V', 0x0B) /* disallow vt switching */ > +#define VT_UNLOCKSWITCH _IO('V', 0x0C) /* allow vt switching */ > +#define VT_GETHIFONTMASK _IO('V', 0x0D) /* return hi font mask */ > > struct vt_event { > __u32 event; > @@ -77,14 +77,14 @@ struct vt_event { > __u32 pad[4]; /* Padding for expansion */ > }; > > -#define VT_WAITEVENT 0x560E /* Wait for an event */ > +#define VT_WAITEVENT _IO('V', 0x0E) /* Wait for an event */ > > struct vt_setactivate { > __u32 console; > struct vt_mode mode; > }; > > -#define VT_SETACTIVATE 0x560F /* Activate and set the mode of a console */ > +#define VT_SETACTIVATE _IO('V', 0x0F) /* Activate and set the mode of a console */ > > /* get console size and cursor position */ > struct vt_consizecsrpos {
Le 31/07/2025 à 16:35, Christophe Leroy a écrit : > Hi Jiri, > > Le 11/06/2025 à 12:02, Jiri Slaby (SUSE) a écrit : >> _IO*() is the proper way of defining ioctl numbers. All these vt numbers >> were synthetically built up the same way the _IO() macro does. >> >> So instead of implicit hex numbers, use _IO() properly. >> >> To not change the pre-existing numbers, use only _IO() (and not _IOR() >> or _IOW()). The latter would change the numbers indeed. > > On powerpc your assumption is wrong, because _IOC_NONE is not 0: > > $ git grep _IOC_NONE arch/powerpc/ > arch/powerpc/include/uapi/asm/ioctl.h:#define _IOC_NONE 1U > > Therefore the value changes even with _IO(), leading to failure of Xorg > as reported by Christian. > And is likely an issue on the 4 following architectures: $ git grep _IOC_NONE arch/ | grep 1U arch/alpha/include/uapi/asm/ioctl.h:#define _IOC_NONE 1U arch/mips/include/uapi/asm/ioctl.h:#define _IOC_NONE 1U arch/powerpc/include/uapi/asm/ioctl.h:#define _IOC_NONE 1U arch/sparc/include/uapi/asm/ioctl.h:#define _IOC_NONE 1U Christophe
On Thu, 31 Jul 2025, Christophe Leroy wrote: > > > Le 31/07/2025 à 16:35, Christophe Leroy a écrit : > > Hi Jiri, > > > > Le 11/06/2025 à 12:02, Jiri Slaby (SUSE) a écrit : > >> _IO*() is the proper way of defining ioctl numbers. All these vt numbers > >> were synthetically built up the same way the _IO() macro does. > >> > >> So instead of implicit hex numbers, use _IO() properly. > >> > >> To not change the pre-existing numbers, use only _IO() (and not _IOR() > >> or _IOW()). The latter would change the numbers indeed. > > > > On powerpc your assumption is wrong, because _IOC_NONE is not 0: > > > > $ git grep _IOC_NONE arch/powerpc/ > > arch/powerpc/include/uapi/asm/ioctl.h:#define _IOC_NONE 1U > > > > Therefore the value changes even with _IO(), leading to failure of Xorg as > > reported by Christian. > > > > And is likely an issue on the 4 following architectures: > > $ git grep _IOC_NONE arch/ | grep 1U > arch/alpha/include/uapi/asm/ioctl.h:#define _IOC_NONE 1U > arch/mips/include/uapi/asm/ioctl.h:#define _IOC_NONE 1U > arch/powerpc/include/uapi/asm/ioctl.h:#define _IOC_NONE 1U > arch/sparc/include/uapi/asm/ioctl.h:#define _IOC_NONE 1U IMHO this one patch could simply be reverted and the "old" code let be. Nicolas
On 31. 07. 25, 22:58, Nicolas Pitre wrote: > On Thu, 31 Jul 2025, Christophe Leroy wrote: > >> >> >> Le 31/07/2025 à 16:35, Christophe Leroy a écrit : >>> Hi Jiri, >>> >>> Le 11/06/2025 à 12:02, Jiri Slaby (SUSE) a écrit : >>>> _IO*() is the proper way of defining ioctl numbers. All these vt numbers >>>> were synthetically built up the same way the _IO() macro does. >>>> >>>> So instead of implicit hex numbers, use _IO() properly. >>>> >>>> To not change the pre-existing numbers, use only _IO() (and not _IOR() >>>> or _IOW()). The latter would change the numbers indeed. >>> >>> On powerpc your assumption is wrong, because _IOC_NONE is not 0: >>> >>> $ git grep _IOC_NONE arch/powerpc/ >>> arch/powerpc/include/uapi/asm/ioctl.h:#define _IOC_NONE 1U >>> >>> Therefore the value changes even with _IO(), leading to failure of Xorg as >>> reported by Christian. >>> >> >> And is likely an issue on the 4 following architectures: >> >> $ git grep _IOC_NONE arch/ | grep 1U >> arch/alpha/include/uapi/asm/ioctl.h:#define _IOC_NONE 1U >> arch/mips/include/uapi/asm/ioctl.h:#define _IOC_NONE 1U >> arch/powerpc/include/uapi/asm/ioctl.h:#define _IOC_NONE 1U >> arch/sparc/include/uapi/asm/ioctl.h:#define _IOC_NONE 1U > > IMHO this one patch could simply be reverted and the "old" code let be. Oh, right -- it's easy to revert (no conflicts). We could use _IOC(0, 'V', number, 0) directly, but I am not sure, that's worth it. thanks, -- js suse labs
On Fri, Aug 01, 2025 at 06:47:46AM +0200, Jiri Slaby wrote: > On 31. 07. 25, 22:58, Nicolas Pitre wrote: > > On Thu, 31 Jul 2025, Christophe Leroy wrote: > > > > > > > > > > > Le 31/07/2025 à 16:35, Christophe Leroy a écrit : > > > > Hi Jiri, > > > > > > > > Le 11/06/2025 à 12:02, Jiri Slaby (SUSE) a écrit : > > > > > _IO*() is the proper way of defining ioctl numbers. All these vt numbers > > > > > were synthetically built up the same way the _IO() macro does. > > > > > > > > > > So instead of implicit hex numbers, use _IO() properly. > > > > > > > > > > To not change the pre-existing numbers, use only _IO() (and not _IOR() > > > > > or _IOW()). The latter would change the numbers indeed. > > > > > > > > On powerpc your assumption is wrong, because _IOC_NONE is not 0: > > > > > > > > $ git grep _IOC_NONE arch/powerpc/ > > > > arch/powerpc/include/uapi/asm/ioctl.h:#define _IOC_NONE 1U > > > > > > > > Therefore the value changes even with _IO(), leading to failure of Xorg as > > > > reported by Christian. > > > > > > > > > > And is likely an issue on the 4 following architectures: > > > > > > $ git grep _IOC_NONE arch/ | grep 1U > > > arch/alpha/include/uapi/asm/ioctl.h:#define _IOC_NONE 1U > > > arch/mips/include/uapi/asm/ioctl.h:#define _IOC_NONE 1U > > > arch/powerpc/include/uapi/asm/ioctl.h:#define _IOC_NONE 1U > > > arch/sparc/include/uapi/asm/ioctl.h:#define _IOC_NONE 1U > > > > IMHO this one patch could simply be reverted and the "old" code let be. > > Oh, right -- it's easy to revert (no conflicts). > > We could use _IOC(0, 'V', number, 0) directly, but I am not sure, that's > worth it. Great, can someone send me a revert? thanks, greg k-h
On Wed, 11 Jun 2025, Jiri Slaby (SUSE) wrote: > _IO*() is the proper way of defining ioctl numbers. All these vt numbers > were synthetically built up the same way the _IO() macro does. > > So instead of implicit hex numbers, use _IO() properly. > > To not change the pre-existing numbers, use only _IO() (and not _IOR() > or _IOW()). The latter would change the numbers indeed. > > Objdump of vt_ioctl.o reveals no difference with this patch. > > Again, VT_GETCONSIZECSRPOS already uses _IOR(), so everything is paved > for this patch. > > Signed-off-by: Jiri Slaby (SUSE) <jirislaby@kernel.org> > Cc: Nicolas Pitre <nico@fluxnic.net> Reviewed-by: Nicolas Pitre <npitre@baylibre.com> > --- > include/uapi/linux/vt.h | 34 +++++++++++++++++----------------- > 1 file changed, 17 insertions(+), 17 deletions(-) > > diff --git a/include/uapi/linux/vt.h b/include/uapi/linux/vt.h > index 714483d68c69..b60fcdfb2746 100644 > --- a/include/uapi/linux/vt.h > +++ b/include/uapi/linux/vt.h > @@ -14,9 +14,9 @@ > /* Note: the ioctl VT_GETSTATE does not work for > consoles 16 and higher (since it returns a short) */ > > -/* 0x56 is 'V', to avoid collision with termios and kd */ > +/* 'V' to avoid collision with termios and kd */ > > -#define VT_OPENQRY 0x5600 /* find available vt */ > +#define VT_OPENQRY _IO('V', 0x00) /* find available vt */ > > struct vt_mode { > __u8 mode; /* vt mode */ > @@ -25,8 +25,8 @@ struct vt_mode { > __s16 acqsig; /* signal to raise on acquisition */ > __s16 frsig; /* unused (set to 0) */ > }; > -#define VT_GETMODE 0x5601 /* get mode of active vt */ > -#define VT_SETMODE 0x5602 /* set mode of active vt */ > +#define VT_GETMODE _IO('V', 0x01) /* get mode of active vt */ > +#define VT_SETMODE _IO('V', 0x02) /* set mode of active vt */ > #define VT_AUTO 0x00 /* auto vt switching */ > #define VT_PROCESS 0x01 /* process controls switching */ > #define VT_ACKACQ 0x02 /* acknowledge switch */ > @@ -36,21 +36,21 @@ struct vt_stat { > __u16 v_signal; /* signal to send */ > __u16 v_state; /* vt bitmask */ > }; > -#define VT_GETSTATE 0x5603 /* get global vt state info */ > -#define VT_SENDSIG 0x5604 /* signal to send to bitmask of vts */ > +#define VT_GETSTATE _IO('V', 0x03) /* get global vt state info */ > +#define VT_SENDSIG _IO('V', 0x04) /* signal to send to bitmask of vts */ > > -#define VT_RELDISP 0x5605 /* release display */ > +#define VT_RELDISP _IO('V', 0x05) /* release display */ > > -#define VT_ACTIVATE 0x5606 /* make vt active */ > -#define VT_WAITACTIVE 0x5607 /* wait for vt active */ > -#define VT_DISALLOCATE 0x5608 /* free memory associated to vt */ > +#define VT_ACTIVATE _IO('V', 0x06) /* make vt active */ > +#define VT_WAITACTIVE _IO('V', 0x07) /* wait for vt active */ > +#define VT_DISALLOCATE _IO('V', 0x08) /* free memory associated to vt */ > > struct vt_sizes { > __u16 v_rows; /* number of rows */ > __u16 v_cols; /* number of columns */ > __u16 v_scrollsize; /* number of lines of scrollback */ > }; > -#define VT_RESIZE 0x5609 /* set kernel's idea of screensize */ > +#define VT_RESIZE _IO('V', 0x09) /* set kernel's idea of screensize */ > > struct vt_consize { > __u16 v_rows; /* number of rows */ > @@ -60,10 +60,10 @@ struct vt_consize { > __u16 v_vcol; /* number of pixel columns on screen */ > __u16 v_ccol; /* number of pixel columns per character */ > }; > -#define VT_RESIZEX 0x560A /* set kernel's idea of screensize + more */ > -#define VT_LOCKSWITCH 0x560B /* disallow vt switching */ > -#define VT_UNLOCKSWITCH 0x560C /* allow vt switching */ > -#define VT_GETHIFONTMASK 0x560D /* return hi font mask */ > +#define VT_RESIZEX _IO('V', 0x0A) /* set kernel's idea of screensize + more */ > +#define VT_LOCKSWITCH _IO('V', 0x0B) /* disallow vt switching */ > +#define VT_UNLOCKSWITCH _IO('V', 0x0C) /* allow vt switching */ > +#define VT_GETHIFONTMASK _IO('V', 0x0D) /* return hi font mask */ > > struct vt_event { > __u32 event; > @@ -77,14 +77,14 @@ struct vt_event { > __u32 pad[4]; /* Padding for expansion */ > }; > > -#define VT_WAITEVENT 0x560E /* Wait for an event */ > +#define VT_WAITEVENT _IO('V', 0x0E) /* Wait for an event */ > > struct vt_setactivate { > __u32 console; > struct vt_mode mode; > }; > > -#define VT_SETACTIVATE 0x560F /* Activate and set the mode of a console */ > +#define VT_SETACTIVATE _IO('V', 0x0F) /* Activate and set the mode of a console */ > > /* get console size and cursor position */ > struct vt_consizecsrpos { > -- > 2.49.0 > >
On Wed, 11 Jun 2025, Jiri Slaby (SUSE) wrote: > _IO*() is the proper way of defining ioctl numbers. All these vt numbers > were synthetically built up the same way the _IO() macro does. > > So instead of implicit hex numbers, use _IO() properly. > > To not change the pre-existing numbers, use only _IO() (and not _IOR() > or _IOW()). The latter would change the numbers indeed. > > Objdump of vt_ioctl.o reveals no difference with this patch. > > Again, VT_GETCONSIZECSRPOS already uses _IOR(), so everything is paved > for this patch. > > Signed-off-by: Jiri Slaby (SUSE) <jirislaby@kernel.org> > Cc: Nicolas Pitre <nico@fluxnic.net> Reviewed-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com> -- i. > --- > include/uapi/linux/vt.h | 34 +++++++++++++++++----------------- > 1 file changed, 17 insertions(+), 17 deletions(-) > > diff --git a/include/uapi/linux/vt.h b/include/uapi/linux/vt.h > index 714483d68c69..b60fcdfb2746 100644 > --- a/include/uapi/linux/vt.h > +++ b/include/uapi/linux/vt.h > @@ -14,9 +14,9 @@ > /* Note: the ioctl VT_GETSTATE does not work for > consoles 16 and higher (since it returns a short) */ > > -/* 0x56 is 'V', to avoid collision with termios and kd */ > +/* 'V' to avoid collision with termios and kd */ > > -#define VT_OPENQRY 0x5600 /* find available vt */ > +#define VT_OPENQRY _IO('V', 0x00) /* find available vt */ > > struct vt_mode { > __u8 mode; /* vt mode */ > @@ -25,8 +25,8 @@ struct vt_mode { > __s16 acqsig; /* signal to raise on acquisition */ > __s16 frsig; /* unused (set to 0) */ > }; > -#define VT_GETMODE 0x5601 /* get mode of active vt */ > -#define VT_SETMODE 0x5602 /* set mode of active vt */ > +#define VT_GETMODE _IO('V', 0x01) /* get mode of active vt */ > +#define VT_SETMODE _IO('V', 0x02) /* set mode of active vt */ > #define VT_AUTO 0x00 /* auto vt switching */ > #define VT_PROCESS 0x01 /* process controls switching */ > #define VT_ACKACQ 0x02 /* acknowledge switch */ > @@ -36,21 +36,21 @@ struct vt_stat { > __u16 v_signal; /* signal to send */ > __u16 v_state; /* vt bitmask */ > }; > -#define VT_GETSTATE 0x5603 /* get global vt state info */ > -#define VT_SENDSIG 0x5604 /* signal to send to bitmask of vts */ > +#define VT_GETSTATE _IO('V', 0x03) /* get global vt state info */ > +#define VT_SENDSIG _IO('V', 0x04) /* signal to send to bitmask of vts */ > > -#define VT_RELDISP 0x5605 /* release display */ > +#define VT_RELDISP _IO('V', 0x05) /* release display */ > > -#define VT_ACTIVATE 0x5606 /* make vt active */ > -#define VT_WAITACTIVE 0x5607 /* wait for vt active */ > -#define VT_DISALLOCATE 0x5608 /* free memory associated to vt */ > +#define VT_ACTIVATE _IO('V', 0x06) /* make vt active */ > +#define VT_WAITACTIVE _IO('V', 0x07) /* wait for vt active */ > +#define VT_DISALLOCATE _IO('V', 0x08) /* free memory associated to vt */ > > struct vt_sizes { > __u16 v_rows; /* number of rows */ > __u16 v_cols; /* number of columns */ > __u16 v_scrollsize; /* number of lines of scrollback */ > }; > -#define VT_RESIZE 0x5609 /* set kernel's idea of screensize */ > +#define VT_RESIZE _IO('V', 0x09) /* set kernel's idea of screensize */ > > struct vt_consize { > __u16 v_rows; /* number of rows */ > @@ -60,10 +60,10 @@ struct vt_consize { > __u16 v_vcol; /* number of pixel columns on screen */ > __u16 v_ccol; /* number of pixel columns per character */ > }; > -#define VT_RESIZEX 0x560A /* set kernel's idea of screensize + more */ > -#define VT_LOCKSWITCH 0x560B /* disallow vt switching */ > -#define VT_UNLOCKSWITCH 0x560C /* allow vt switching */ > -#define VT_GETHIFONTMASK 0x560D /* return hi font mask */ > +#define VT_RESIZEX _IO('V', 0x0A) /* set kernel's idea of screensize + more */ > +#define VT_LOCKSWITCH _IO('V', 0x0B) /* disallow vt switching */ > +#define VT_UNLOCKSWITCH _IO('V', 0x0C) /* allow vt switching */ > +#define VT_GETHIFONTMASK _IO('V', 0x0D) /* return hi font mask */ > > struct vt_event { > __u32 event; > @@ -77,14 +77,14 @@ struct vt_event { > __u32 pad[4]; /* Padding for expansion */ > }; > > -#define VT_WAITEVENT 0x560E /* Wait for an event */ > +#define VT_WAITEVENT _IO('V', 0x0E) /* Wait for an event */ > > struct vt_setactivate { > __u32 console; > struct vt_mode mode; > }; > > -#define VT_SETACTIVATE 0x560F /* Activate and set the mode of a console */ > +#define VT_SETACTIVATE _IO('V', 0x0F) /* Activate and set the mode of a console */ > > /* get console size and cursor position */ > struct vt_consizecsrpos { >
© 2016 - 2025 Red Hat, Inc.