Seperation of some framebuffer code from the console code. Moving away
come of the code from the global variable currcon to using a struct
vc_data that reperents each VC.
You can import this changeset into BK by piping this whole message to:
'| bk receive [path to repository]' or apply the patch as usual.
===================================================================
ChangeSet@1.714.6.3, 2002-10-09 11:55:52-07:00, jsimmons@maxwell.earthlink.net
Started to nuke the gloabl currcon variable. I changed over the unimap and font handling functions to use struct vc_data instead. I also seperated out the framebuffer code from the VT code since very soon the framebuffer will be able to function without a VT.
arch/mips64/kernel/ioctl32.c | 3
arch/ppc64/kernel/ioctl32.c | 67 +++++++++++--------
arch/sparc64/kernel/ioctl32.c | 34 +++++++---
arch/x86_64/ia32/ia32_ioctl.c | 35 +++++++---
drivers/char/consolemap.c | 142 ++++++++++++++++++++----------------------
drivers/char/keyboard.c | 1
drivers/char/selection.c | 4 -
drivers/char/vc_screen.c | 1
drivers/char/vt.c | 65 +++++++++----------
drivers/char/vt_ioctl.c | 44 ++++++-------
drivers/video/dummycon.c | 1
drivers/video/mdacon.c | 3
drivers/video/newport_con.c | 1
drivers/video/promcon.c | 13 +--
drivers/video/sticon.c | 1
drivers/video/vgacon.c | 9 +-
include/linux/consolemap.h | 6 -
include/linux/vt_kern.h | 25 +++----
include/video/fbcon.h | 2
19 files changed, 246 insertions(+), 211 deletions(-)
diff -Nru a/arch/mips64/kernel/ioctl32.c b/arch/mips64/kernel/ioctl32.c
--- a/arch/mips64/kernel/ioctl32.c Fri Oct 11 18:17:53 2002
+++ b/arch/mips64/kernel/ioctl32.c Fri Oct 11 18:17:53 2002
@@ -619,6 +619,8 @@
IOCTL32_DEFAULT(FIONBIO),
IOCTL32_DEFAULT(FIONREAD),
+#ifdef CONFIG_VT
+
IOCTL32_DEFAULT(PIO_FONT),
IOCTL32_DEFAULT(GIO_FONT),
IOCTL32_DEFAULT(KDSIGACCEPT),
@@ -662,6 +664,7 @@
IOCTL32_DEFAULT(VT_RESIZEX),
IOCTL32_DEFAULT(VT_LOCKSWITCH),
IOCTL32_DEFAULT(VT_UNLOCKSWITCH),
+#endif
#ifdef CONFIG_NET
/* Socket level stuff */
diff -Nru a/arch/ppc64/kernel/ioctl32.c b/arch/ppc64/kernel/ioctl32.c
--- a/arch/ppc64/kernel/ioctl32.c Fri Oct 11 18:17:54 2002
+++ b/arch/ppc64/kernel/ioctl32.c Fri Oct 11 18:17:54 2002
@@ -1794,6 +1794,8 @@
static int do_fontx_ioctl(unsigned int fd, int cmd, struct consolefontdesc32 *user_cfd, struct file *file)
{
+ struct tty_struct *tty = (struct tty_struct *) file->private_data;
+ struct vc_data *vc = (struct vc_data *) tty->driver_data;
struct consolefontdesc cfdarg;
struct console_font_op op;
int i, perm;
@@ -1816,7 +1818,7 @@
op.height = cfdarg.charheight;
op.charcount = cfdarg.charcount;
op.data = cfdarg.chardata;
- return con_font_op(fg_console, &op);
+ return con_font_op(vc, &op);
case GIO_FONTX:
if (!cfdarg.chardata)
return 0;
@@ -1826,7 +1828,7 @@
op.height = cfdarg.charheight;
op.charcount = cfdarg.charcount;
op.data = cfdarg.chardata;
- i = con_font_op(fg_console, &op);
+ i = con_font_op(vc, &op);
if (i)
return i;
cfdarg.charheight = op.height;
@@ -1849,9 +1851,10 @@
static int do_kdfontop_ioctl(unsigned int fd, unsigned int cmd, struct console_font_op32 *fontop, struct file *file)
{
- struct console_font_op op;
+ struct tty_struct *tty = (struct tty_struct *) file->private_data;
+ struct vc_data *vc = (struct vc_data *) tty->driver_data;
int perm = vt_check(file), i;
- struct vt_struct *vt;
+ struct console_font_op op;
if (perm < 0) return perm;
@@ -1861,8 +1864,7 @@
return -EPERM;
op.data = (unsigned char *)A(((struct console_font_op32 *)&op)->data);
op.flags |= KD_FONT_FLAG_OLD;
- vt = (struct vt_struct *)((struct tty_struct *)file->private_data)->driver_data;
- i = con_font_op(vt->vc_num, &op);
+ i = con_font_op(vc, &op);
if (i) return i;
((struct console_font_op32 *)&op)->data = (unsigned long)op.data;
if (copy_to_user((void *) fontop, &op, sizeof(struct console_font_op32)))
@@ -1870,6 +1872,33 @@
return 0;
}
+struct unimapdesc32 {
+ unsigned short entry_ct;
+ u32 entries;
+};
+
+static int do_unimap_ioctl(unsigned int fd, unsigned int cmd, struct unimapdesc32 *user_ud, struct file *file)
+{
+ struct tty_struct *tty = (struct tty_struct *) file->private_data;
+ struct vc_data *vc = (struct vc_data *) tty->driver_data;
+ int perm = vt_check(file);
+ struct unimapdesc32 tmp;
+
+ if (perm < 0) return perm;
+ if (copy_from_user(&tmp, user_ud, sizeof tmp))
+ return -EFAULT;
+ switch (cmd) {
+ case PIO_UNIMAP:
+ if (!perm) return -EPERM;
+ return con_set_unimap(vc, tmp.entry_ct, (struct unipair *)A(tmp.entries));
+ case GIO_UNIMAP:
+ return con_get_unimap(vc, tmp.entry_ct, &(user_ud->entry_ct), (struct unipair *)A(tmp.entries));
+ }
+ return 0;
+}
+#endif /* CONFIG_VT */
+
+#ifdef CONFIG_FB
struct fb_fix_screeninfo32 {
char id[16]; /* identification string eg "TT Builtin" */
unsigned int smem_start; /* Start of frame buffer mem */
@@ -1993,30 +2022,8 @@
}
return err;
}
+#endif /* CONFIG_FB */
-struct unimapdesc32 {
- unsigned short entry_ct;
- u32 entries;
-};
-
-static int do_unimap_ioctl(unsigned int fd, unsigned int cmd, struct unimapdesc32 *user_ud, struct file *file)
-{
- struct unimapdesc32 tmp;
- int perm = vt_check(file);
-
- if (perm < 0) return perm;
- if (copy_from_user(&tmp, user_ud, sizeof tmp))
- return -EFAULT;
- switch (cmd) {
- case PIO_UNIMAP:
- if (!perm) return -EPERM;
- return con_set_unimap(fg_console, tmp.entry_ct, (struct unipair *)A(tmp.entries));
- case GIO_UNIMAP:
- return con_get_unimap(fg_console, tmp.entry_ct, &(user_ud->entry_ct), (struct unipair *)A(tmp.entries));
- }
- return 0;
-}
-#endif /* CONFIG_VT */
static int do_smb_getmountuid(unsigned int fd, unsigned int cmd, unsigned long arg)
{
mm_segment_t old_fs = get_fs();
@@ -4465,6 +4472,8 @@
HANDLE_IOCTL(PIO_UNIMAP, do_unimap_ioctl),
HANDLE_IOCTL(GIO_UNIMAP, do_unimap_ioctl),
HANDLE_IOCTL(KDFONTOP, do_kdfontop_ioctl),
+#endif
+#ifdef CONFIG_FB
HANDLE_IOCTL(FBIOGET_FSCREENINFO, do_fbioget_fscreeninfo_ioctl),
HANDLE_IOCTL(FBIOGETCMAP, do_fbiogetcmap_ioctl),
HANDLE_IOCTL(FBIOPUTCMAP, do_fbioputcmap_ioctl),
diff -Nru a/arch/sparc64/kernel/ioctl32.c b/arch/sparc64/kernel/ioctl32.c
--- a/arch/sparc64/kernel/ioctl32.c Fri Oct 11 18:17:54 2002
+++ b/arch/sparc64/kernel/ioctl32.c Fri Oct 11 18:17:54 2002
@@ -873,6 +873,7 @@
return err ? -EFAULT : 0;
}
+#ifdef CONFIG_FB
struct fbcmap32 {
int index; /* first element (0 origin) */
int count;
@@ -1112,6 +1113,7 @@
if (cmap.transp) kfree(cmap.transp);
return err;
}
+#endif /* CONFIG_FB */
static int hdio_ioctl_trans(unsigned int fd, unsigned int cmd, unsigned long arg)
{
@@ -2077,6 +2079,7 @@
extern int tty_ioctl(struct inode * inode, struct file * file, unsigned int cmd, unsigned long arg);
+#ifdef CONFIG_VT
static int vt_check(struct file *file)
{
struct tty_struct *tty;
@@ -2109,6 +2112,8 @@
static int do_fontx_ioctl(unsigned int fd, int cmd, struct consolefontdesc32 *user_cfd, struct file *file)
{
+ struct tty_struct *tty = (struct tty_struct *)file->private_data;
+ struct vc_data *vc = (struct vc_data *) tty->driver_data;
struct consolefontdesc cfdarg;
struct console_font_op op;
int i, perm;
@@ -2131,7 +2136,7 @@
op.height = cfdarg.charheight;
op.charcount = cfdarg.charcount;
op.data = cfdarg.chardata;
- return con_font_op(fg_console, &op);
+ return con_font_op(vc, &op);
case GIO_FONTX:
if (!cfdarg.chardata)
return 0;
@@ -2141,7 +2146,7 @@
op.height = cfdarg.charheight;
op.charcount = cfdarg.charcount;
op.data = cfdarg.chardata;
- i = con_font_op(fg_console, &op);
+ i = con_font_op(vc, &op);
if (i)
return i;
cfdarg.charheight = op.height;
@@ -2164,9 +2169,10 @@
static int do_kdfontop_ioctl(unsigned int fd, unsigned int cmd, struct console_font_op32 *fontop, struct file *file)
{
- struct console_font_op op;
+ struct tty_struct *tty = (struct tty_struct *)file->private_data;
+ struct vc_data *vc = (struct vc_data *) tty->driver_data;
int perm = vt_check(file), i;
- struct vt_struct *vt;
+ struct console_font_op op;
if (perm < 0) return perm;
@@ -2176,8 +2182,7 @@
return -EPERM;
op.data = (unsigned char *)A(((struct console_font_op32 *)&op)->data);
op.flags |= KD_FONT_FLAG_OLD;
- vt = (struct vt_struct *)((struct tty_struct *)file->private_data)->driver_data;
- i = con_font_op(vt->vc_num, &op);
+ i = con_font_op(vc, &op);
if (i) return i;
((struct console_font_op32 *)&op)->data = (unsigned long)op.data;
if (copy_to_user((void *) fontop, &op, sizeof(struct console_font_op32)))
@@ -2192,8 +2197,10 @@
static int do_unimap_ioctl(unsigned int fd, unsigned int cmd, struct unimapdesc32 *user_ud, struct file *file)
{
- struct unimapdesc32 tmp;
+ struct tty_struct *tty = (struct tty_struct *)file->private_data;
+ struct vc_data *vc = (struct vc_data *) tty->driver_data;
int perm = vt_check(file);
+ struct unimapdesc32 tmp;
if (perm < 0) return perm;
if (copy_from_user(&tmp, user_ud, sizeof tmp))
@@ -2201,12 +2208,13 @@
switch (cmd) {
case PIO_UNIMAP:
if (!perm) return -EPERM;
- return con_set_unimap(fg_console, tmp.entry_ct, (struct unipair *)A(tmp.entries));
+ return con_set_unimap(vc, tmp.entry_ct, (struct unipair *)A(tmp.entries));
case GIO_UNIMAP:
- return con_get_unimap(fg_console, tmp.entry_ct, &(user_ud->entry_ct), (struct unipair *)A(tmp.entries));
+ return con_get_unimap(vc, tmp.entry_ct, &(user_ud->entry_ct), (struct unipair *)A(tmp.entries));
}
return 0;
}
+#endif /* CONFIG_VT */
static int do_smb_getmountuid(unsigned int fd, unsigned int cmd, unsigned long arg)
{
@@ -4273,6 +4281,7 @@
COMPATIBLE_IOCTL(TIOCSSERIAL)
COMPATIBLE_IOCTL(TIOCSERGETLSR)
COMPATIBLE_IOCTL(TIOCSLTC)
+#ifdef CONFIG_FB
/* Big F */
COMPATIBLE_IOCTL(FBIOGTYPE)
COMPATIBLE_IOCTL(FBIOSATTR)
@@ -4293,6 +4302,7 @@
COMPATIBLE_IOCTL(FBIOPUT_CURSORSTATE)
COMPATIBLE_IOCTL(FBIOGET_CON2FBMAP)
COMPATIBLE_IOCTL(FBIOPUT_CON2FBMAP)
+#endif
/* Little f */
COMPATIBLE_IOCTL(FIOCLEX)
COMPATIBLE_IOCTL(FIONCLEX)
@@ -4423,6 +4433,7 @@
COMPATIBLE_IOCTL(TUNSETIFF)
COMPATIBLE_IOCTL(TUNSETPERSIST)
COMPATIBLE_IOCTL(TUNSETOWNER)
+#ifdef CONFIG_VT
/* Big V */
COMPATIBLE_IOCTL(VT_SETMODE)
COMPATIBLE_IOCTL(VT_GETMODE)
@@ -4436,6 +4447,7 @@
COMPATIBLE_IOCTL(VT_RESIZEX)
COMPATIBLE_IOCTL(VT_LOCKSWITCH)
COMPATIBLE_IOCTL(VT_UNLOCKSWITCH)
+#endif
/* Little v */
COMPATIBLE_IOCTL(VUIDSFORMAT)
COMPATIBLE_IOCTL(VUIDGFORMAT)
@@ -5007,12 +5019,14 @@
HANDLE_IOCTL(0x1260, broken_blkgetsize)
HANDLE_IOCTL(BLKSECTGET, w_long)
HANDLE_IOCTL(BLKPG, blkpg_ioctl_trans)
+#ifdef CONFIG_FB
HANDLE_IOCTL(FBIOPUTCMAP32, fbiogetputcmap)
HANDLE_IOCTL(FBIOGETCMAP32, fbiogetputcmap)
HANDLE_IOCTL(FBIOSCURSOR32, fbiogscursor)
HANDLE_IOCTL(FBIOGET_FSCREENINFO, fb_ioctl_trans)
HANDLE_IOCTL(FBIOGETCMAP, fb_ioctl_trans)
HANDLE_IOCTL(FBIOPUTCMAP, fb_ioctl_trans)
+#endif
HANDLE_IOCTL(HDIO_GET_UNMASKINTR, hdio_ioctl_trans)
HANDLE_IOCTL(HDIO_GET_DMA, hdio_ioctl_trans)
HANDLE_IOCTL(HDIO_GET_32BIT, hdio_ioctl_trans)
@@ -5048,11 +5062,13 @@
HANDLE_IOCTL(LOOP_GET_STATUS, loop_status)
#define AUTOFS_IOC_SETTIMEOUT32 _IOWR(0x93,0x64,unsigned int)
HANDLE_IOCTL(AUTOFS_IOC_SETTIMEOUT32, ioc_settimeout)
+#ifdef CONFIG_VT
HANDLE_IOCTL(PIO_FONTX, do_fontx_ioctl)
HANDLE_IOCTL(GIO_FONTX, do_fontx_ioctl)
HANDLE_IOCTL(PIO_UNIMAP, do_unimap_ioctl)
HANDLE_IOCTL(GIO_UNIMAP, do_unimap_ioctl)
HANDLE_IOCTL(KDFONTOP, do_kdfontop_ioctl)
+#endif
HANDLE_IOCTL(EXT2_IOC32_GETFLAGS, do_ext2_ioctl)
HANDLE_IOCTL(EXT2_IOC32_SETFLAGS, do_ext2_ioctl)
HANDLE_IOCTL(EXT2_IOC32_GETVERSION, do_ext2_ioctl)
diff -Nru a/arch/x86_64/ia32/ia32_ioctl.c b/arch/x86_64/ia32/ia32_ioctl.c
--- a/arch/x86_64/ia32/ia32_ioctl.c Fri Oct 11 18:17:53 2002
+++ b/arch/x86_64/ia32/ia32_ioctl.c Fri Oct 11 18:17:53 2002
@@ -790,6 +790,7 @@
return err ? -EFAULT : 0;
}
+#ifdef CONFIG_FB
struct fbcmap32 {
int index; /* first element (0 origin) */
int count;
@@ -930,6 +931,7 @@
if (cmap.transp) kfree(cmap.transp);
return err;
}
+#endif /* CONFIG_FB */
static int hdio_ioctl_trans(unsigned int fd, unsigned int cmd, unsigned long arg)
{
@@ -1633,6 +1635,8 @@
extern int tty_ioctl(struct inode * inode, struct file * file, unsigned int cmd, unsigned long arg);
+#ifdef CONFIG_VT
+
static int vt_check(struct file *file)
{
struct tty_struct *tty;
@@ -1665,6 +1669,8 @@
static int do_fontx_ioctl(unsigned int fd, int cmd, struct consolefontdesc32 *user_cfd, struct file *file)
{
+ struct tty_struct *tty = (struct tty_struct *)file->private_data;
+ struct vc_data *vc = (struct vc_data *) tty->driver_data;
struct consolefontdesc cfdarg;
struct console_font_op op;
int i, perm;
@@ -1687,7 +1693,7 @@
op.height = cfdarg.charheight;
op.charcount = cfdarg.charcount;
op.data = cfdarg.chardata;
- return con_font_op(fg_console, &op);
+ return con_font_op(vc, &op);
case GIO_FONTX:
if (!cfdarg.chardata)
return 0;
@@ -1697,7 +1703,7 @@
op.height = cfdarg.charheight;
op.charcount = cfdarg.charcount;
op.data = cfdarg.chardata;
- i = con_font_op(fg_console, &op);
+ i = con_font_op(vc, &op);
if (i)
return i;
cfdarg.charheight = op.height;
@@ -1720,9 +1726,10 @@
static int do_kdfontop_ioctl(unsigned int fd, unsigned int cmd, struct console_font_op32 *fontop, struct file *file)
{
- struct console_font_op op;
+ struct tty_struct *tty = (struct tty_struct *)file->private_data;
+ struct vc_data *vc = (struct vc_data *) tty->driver_data;
int perm = vt_check(file), i;
- struct vt_struct *vt;
+ struct console_font_op op;
if (perm < 0) return perm;
@@ -1732,8 +1739,7 @@
return -EPERM;
op.data = (unsigned char *)A(((struct console_font_op32 *)&op)->data);
op.flags |= KD_FONT_FLAG_OLD;
- vt = (struct vt_struct *)((struct tty_struct *)file->private_data)->driver_data;
- i = con_font_op(vt->vc_num, &op);
+ i = con_font_op(vc, &op);
if (i) return i;
((struct console_font_op32 *)&op)->data = (unsigned long)op.data;
if (copy_to_user((void *) fontop, &op, sizeof(struct console_font_op32)))
@@ -1748,8 +1754,10 @@
static int do_unimap_ioctl(unsigned int fd, unsigned int cmd, struct unimapdesc32 *user_ud, struct file *file)
{
- struct unimapdesc32 tmp;
+ struct tty_struct *tty = (struct tty_struct *)file->private_data;
+ struct vc_data *vc = (struct vc_data *) tty->driver_data;
int perm = vt_check(file);
+ struct unimapdesc32 tmp;
if (perm < 0) return perm;
if (copy_from_user(&tmp, user_ud, sizeof tmp))
@@ -1757,12 +1765,13 @@
switch (cmd) {
case PIO_UNIMAP:
if (!perm) return -EPERM;
- return con_set_unimap(fg_console, tmp.entry_ct, (struct unipair *)A(tmp.entries));
+ return con_set_unimap(vc, tmp.entry_ct, (struct unipair *)A(tmp.entries));
case GIO_UNIMAP:
- return con_get_unimap(fg_console, tmp.entry_ct, &(user_ud->entry_ct), (struct unipair *)A(tmp.entries));
+ return con_get_unimap(vc, tmp.entry_ct, &(user_ud->entry_ct), (struct unipair *)A(tmp.entries));
}
return 0;
}
+#endif /* CONFIG_VT */
static int do_smb_getmountuid(unsigned int fd, unsigned int cmd, unsigned long arg)
{
@@ -3172,6 +3181,7 @@
COMPATIBLE_IOCTL(TIOCGPTN)
COMPATIBLE_IOCTL(TIOCSPTLCK)
COMPATIBLE_IOCTL(TIOCSERGETLSR)
+#ifdef CONFIG_FB
COMPATIBLE_IOCTL(FBIOGET_VSCREENINFO)
COMPATIBLE_IOCTL(FBIOPUT_VSCREENINFO)
COMPATIBLE_IOCTL(FBIOPAN_DISPLAY)
@@ -3182,6 +3192,7 @@
COMPATIBLE_IOCTL(FBIOPUT_CURSORSTATE)
COMPATIBLE_IOCTL(FBIOGET_CON2FBMAP)
COMPATIBLE_IOCTL(FBIOPUT_CON2FBMAP)
+#endif
/* Little f */
COMPATIBLE_IOCTL(FIOCLEX)
COMPATIBLE_IOCTL(FIONCLEX)
@@ -3291,6 +3302,7 @@
COMPATIBLE_IOCTL(SCSI_IOCTL_TAGGED_DISABLE)
COMPATIBLE_IOCTL(SCSI_IOCTL_GET_BUS_NUMBER)
COMPATIBLE_IOCTL(SCSI_IOCTL_SEND_COMMAND)
+#ifdef CONFIG_VT
/* Big V */
COMPATIBLE_IOCTL(VT_SETMODE)
COMPATIBLE_IOCTL(VT_GETMODE)
@@ -3304,6 +3316,7 @@
COMPATIBLE_IOCTL(VT_RESIZEX)
COMPATIBLE_IOCTL(VT_LOCKSWITCH)
COMPATIBLE_IOCTL(VT_UNLOCKSWITCH)
+#endif
/* Little v, the video4linux ioctls */
COMPATIBLE_IOCTL(VIDIOCGCAP)
COMPATIBLE_IOCTL(VIDIOCGCHAN)
@@ -3747,8 +3760,10 @@
HANDLE_IOCTL(0x1260, broken_blkgetsize)
HANDLE_IOCTL(BLKSECTGET, w_long)
HANDLE_IOCTL(BLKPG, blkpg_ioctl_trans)
+#ifdef CONFIG_FB
HANDLE_IOCTL(FBIOGETCMAP, fb_ioctl_trans)
HANDLE_IOCTL(FBIOPUTCMAP, fb_ioctl_trans)
+#endif
HANDLE_IOCTL(HDIO_GET_UNMASKINTR, hdio_ioctl_trans)
HANDLE_IOCTL(HDIO_GET_DMA, hdio_ioctl_trans)
HANDLE_IOCTL(HDIO_GET_32BIT, hdio_ioctl_trans)
@@ -3779,11 +3794,13 @@
HANDLE_IOCTL(CDROM_SEND_PACKET, cdrom_ioctl_trans)
HANDLE_IOCTL(LOOP_SET_STATUS, loop_status)
HANDLE_IOCTL(LOOP_GET_STATUS, loop_status)
+#ifdef CONFIG_VT
HANDLE_IOCTL(PIO_FONTX, do_fontx_ioctl)
HANDLE_IOCTL(GIO_FONTX, do_fontx_ioctl)
HANDLE_IOCTL(PIO_UNIMAP, do_unimap_ioctl)
HANDLE_IOCTL(GIO_UNIMAP, do_unimap_ioctl)
HANDLE_IOCTL(KDFONTOP, do_kdfontop_ioctl)
+#endif
HANDLE_IOCTL(EXT2_IOC32_GETFLAGS, do_ext2_ioctl)
HANDLE_IOCTL(EXT2_IOC32_SETFLAGS, do_ext2_ioctl)
HANDLE_IOCTL(EXT2_IOC32_GETVERSION, do_ext2_ioctl)
diff -Nru a/drivers/char/consolemap.c b/drivers/char/consolemap.c
--- a/drivers/char/consolemap.c Fri Oct 11 18:17:53 2002
+++ b/drivers/char/consolemap.c Fri Oct 11 18:17:53 2002
@@ -19,7 +19,6 @@
#include <linux/tty.h>
#include <asm/uaccess.h>
#include <linux/consolemap.h>
-#include <linux/console_struct.h>
#include <linux/vt_kern.h>
static unsigned short translations[][256] = {
@@ -182,7 +181,7 @@
static struct uni_pagedir *dflt;
-static void set_inverse_transl(struct vc_data *conp, struct uni_pagedir *p, int i)
+static void set_inverse_transl(struct vc_data *vc, struct uni_pagedir *p, int i)
{
int j, glyph;
unsigned short *t = translations[i];
@@ -199,7 +198,7 @@
memset(q, 0, MAX_GLYPH);
for (j = 0; j < E_TABSZ; j++) {
- glyph = conv_uni_to_pc(conp, t[j]);
+ glyph = conv_uni_to_pc(vc, t[j]);
if (glyph >= 0 && glyph < MAX_GLYPH && q[glyph] < 32) {
/* prefer '-' above SHY etc. */
q[glyph] = j;
@@ -207,10 +206,10 @@
}
}
-unsigned short *set_translate(int m,int currcons)
+void set_translate(struct vc_data *vc, int m)
{
- inv_translate[currcons] = m;
- return translations[m];
+ inv_translate[vc->vc_num] = m;
+ vc->vc_translate = translations[m];
}
/*
@@ -220,29 +219,32 @@
* was active, or using Unicode.
* Still, it is now possible to a certain extent to cut and paste non-ASCII.
*/
-unsigned char inverse_translate(struct vc_data *conp, int glyph)
+unsigned char inverse_translate(struct vc_data *vc, int glyph)
{
struct uni_pagedir *p;
if (glyph < 0 || glyph >= MAX_GLYPH)
return 0;
- else if (!(p = (struct uni_pagedir *)*conp->vc_uni_pagedir_loc) ||
- !p->inverse_translations[inv_translate[conp->vc_num]])
+ else if (!(p = (struct uni_pagedir *)*vc->vc_uni_pagedir_loc) ||
+ !p->inverse_translations[inv_translate[vc->vc_num]])
return glyph;
else
- return p->inverse_translations[inv_translate[conp->vc_num]][glyph];
+ return p->inverse_translations[inv_translate[vc->vc_num]][glyph];
}
static void update_user_maps(void)
{
- int i;
struct uni_pagedir *p, *q = NULL;
+ struct vc_data *vc;
+ int i;
for (i = 0; i < MAX_NR_CONSOLES; i++) {
- if (!vc_cons_allocated(i))
+ vc = vc_cons[i].d;
+
+ if (!vc)
continue;
- p = (struct uni_pagedir *)*vc_cons[i].d->vc_uni_pagedir_loc;
+ p = (struct uni_pagedir *)*vc->vc_uni_pagedir_loc;
if (p && p != q) {
- set_inverse_transl(vc_cons[i].d, p, USER_MAP);
+ set_inverse_transl(vc, p, USER_MAP);
q = p;
}
}
@@ -256,7 +258,7 @@
* 0xf000-0xf0ff "transparent" Unicodes) whereas the "new" variants set
* Unicodes explicitly.
*/
-int con_set_trans_old(unsigned char * arg)
+int con_set_trans_old(struct vc_data *vc, unsigned char * arg)
{
int i;
unsigned short *p = translations[USER_MAP];
@@ -275,7 +277,7 @@
return 0;
}
-int con_get_trans_old(unsigned char * arg)
+int con_get_trans_old(struct vc_data *vc, unsigned char * arg)
{
int i, ch;
unsigned short *p = translations[USER_MAP];
@@ -286,13 +288,13 @@
for (i=0; i<E_TABSZ ; i++)
{
- ch = conv_uni_to_pc(vc_cons[fg_console].d, p[i]);
+ ch = conv_uni_to_pc(vc, p[i]);
__put_user((ch & ~0xff) ? 0 : ch, arg+i);
}
return 0;
}
-int con_set_trans_new(ushort * arg)
+int con_set_trans_new(struct vc_data *vc, ushort * arg)
{
int i;
unsigned short *p = translations[USER_MAP];
@@ -312,7 +314,7 @@
return 0;
}
-int con_get_trans_new(ushort * arg)
+int con_get_trans_new(struct vc_data *vc, ushort * arg)
{
int i;
unsigned short *p = translations[USER_MAP];
@@ -363,28 +365,29 @@
}
}
-void con_free_unimap(int con)
+void con_free_unimap(struct vc_data *vc)
{
struct uni_pagedir *p;
- struct vc_data *conp = vc_cons[con].d;
- p = (struct uni_pagedir *)*conp->vc_uni_pagedir_loc;
+ p = (struct uni_pagedir *)*vc->vc_uni_pagedir_loc;
if (!p) return;
- *conp->vc_uni_pagedir_loc = 0;
+ *vc->vc_uni_pagedir_loc = 0;
if (--p->refcount) return;
con_release_unimap(p);
kfree(p);
}
-static int con_unify_unimap(struct vc_data *conp, struct uni_pagedir *p)
+static int con_unify_unimap(struct vc_data *vc, struct uni_pagedir *p)
{
int i, j, k;
struct uni_pagedir *q;
for (i = 0; i < MAX_NR_CONSOLES; i++) {
- if (!vc_cons_allocated(i))
+ struct vc_data *tmp = vc_cons[i].d;
+
+ if (!tmp)
continue;
- q = (struct uni_pagedir *)*vc_cons[i].d->vc_uni_pagedir_loc;
+ q = (struct uni_pagedir *)*tmp->vc_uni_pagedir_loc;
if (!q || q == p || q->sum != p->sum)
continue;
for (j = 0; j < 32; j++) {
@@ -407,7 +410,7 @@
}
if (j == 32) {
q->refcount++;
- *conp->vc_uni_pagedir_loc = (unsigned long)q;
+ *vc->vc_uni_pagedir_loc = (unsigned long)q;
con_release_unimap(p);
kfree(p);
return 1;
@@ -443,12 +446,11 @@
}
/* ui is a leftover from using a hashtable, but might be used again */
-int con_clear_unimap(int con, struct unimapinit *ui)
+int con_clear_unimap(struct vc_data *vc, struct unimapinit *ui)
{
struct uni_pagedir *p, *q;
- struct vc_data *conp = vc_cons[con].d;
- p = (struct uni_pagedir *)*conp->vc_uni_pagedir_loc;
+ p = (struct uni_pagedir *)*vc->vc_uni_pagedir_loc;
if (p && p->readonly) return -EIO;
if (!p || --p->refcount) {
q = (struct uni_pagedir *)kmalloc(sizeof(*p), GFP_KERNEL);
@@ -458,7 +460,7 @@
}
memset(q, 0, sizeof(*q));
q->refcount=1;
- *conp->vc_uni_pagedir_loc = (unsigned long)q;
+ *vc->vc_uni_pagedir_loc = (unsigned long)q;
} else {
if (p == dflt) dflt = NULL;
p->refcount++;
@@ -469,13 +471,12 @@
}
int
-con_set_unimap(int con, ushort ct, struct unipair *list)
+con_set_unimap(struct vc_data *vc, ushort ct, struct unipair *list)
{
- int err = 0, err1, i;
struct uni_pagedir *p, *q;
- struct vc_data *conp = vc_cons[con].d;
-
- p = (struct uni_pagedir *)*conp->vc_uni_pagedir_loc;
+ int err = 0, err1, i;
+
+ p = (struct uni_pagedir *)*vc->vc_uni_pagedir_loc;
if (p->readonly) return -EIO;
if (!ct) return 0;
@@ -484,10 +485,10 @@
int j, k;
u16 **p1, *p2, l;
- err1 = con_clear_unimap(con, NULL);
+ err1 = con_clear_unimap(vc, NULL);
if (err1) return err1;
- q = (struct uni_pagedir *)*conp->vc_uni_pagedir_loc;
+ q = (struct uni_pagedir *)*vc->vc_uni_pagedir_loc;
for (i = 0, l = 0; i < 32; i++)
if ((p1 = p->uni_pgdir[i]))
for (j = 0; j < 32; j++)
@@ -497,7 +498,7 @@
err1 = con_insert_unipair(q, l, p2[k]);
if (err1) {
p->refcount++;
- *conp->vc_uni_pagedir_loc = (unsigned long)p;
+ *vc->vc_uni_pagedir_loc = (unsigned long)p;
con_release_unimap(q);
kfree(q);
return err1;
@@ -516,12 +517,11 @@
list++;
}
- if (con_unify_unimap(conp, p))
+ if (con_unify_unimap(vc, p))
return err;
for (i = 0; i <= 3; i++)
- set_inverse_transl(conp, p, i); /* Update all inverse translations */
-
+ set_inverse_transl(vc, p, i); /* Update all inverse translations */
return err;
}
@@ -531,19 +531,18 @@
PIO_FONTRESET ioctl is called. */
int
-con_set_default_unimap(int con)
+con_set_default_unimap(struct vc_data *vc)
{
int i, j, err = 0, err1;
u16 *q;
struct uni_pagedir *p;
- struct vc_data *conp = vc_cons[con].d;
if (dflt) {
- p = (struct uni_pagedir *)*conp->vc_uni_pagedir_loc;
+ p = (struct uni_pagedir *)*vc->vc_uni_pagedir_loc;
if (p == dflt)
return 0;
dflt->refcount++;
- *conp->vc_uni_pagedir_loc = (unsigned long)dflt;
+ *vc->vc_uni_pagedir_loc = (unsigned long)dflt;
if (p && --p->refcount) {
con_release_unimap(p);
kfree(p);
@@ -552,11 +551,10 @@
}
/* The default font is always 256 characters */
-
- err = con_clear_unimap(con,NULL);
+ err = con_clear_unimap(vc, NULL);
if (err) return err;
- p = (struct uni_pagedir *)*conp->vc_uni_pagedir_loc;
+ p = (struct uni_pagedir *)*vc->vc_uni_pagedir_loc;
q = dfont_unitable;
for (i = 0; i < 256; i++)
@@ -566,46 +564,43 @@
err = err1;
}
- if (con_unify_unimap(conp, p)) {
- dflt = (struct uni_pagedir *)*conp->vc_uni_pagedir_loc;
+ if (con_unify_unimap(vc, p)) {
+ dflt = (struct uni_pagedir *)*vc->vc_uni_pagedir_loc;
return err;
}
for (i = 0; i <= 3; i++)
- set_inverse_transl(conp, p, i); /* Update all inverse translations */
+ set_inverse_transl(vc, p, i); /* Update all inverse translations */
dflt = p;
return err;
}
int
-con_copy_unimap(int dstcon, int srccon)
+con_copy_unimap(struct vc_data *dst, struct vc_data *src)
{
- struct vc_data *sconp = vc_cons[srccon].d;
- struct vc_data *dconp = vc_cons[dstcon].d;
struct uni_pagedir *q;
- if (!vc_cons_allocated(srccon) || !*sconp->vc_uni_pagedir_loc)
+ if (!src || !*src->vc_uni_pagedir_loc)
return -EINVAL;
- if (*dconp->vc_uni_pagedir_loc == *sconp->vc_uni_pagedir_loc)
+ if (*dst->vc_uni_pagedir_loc == *src->vc_uni_pagedir_loc)
return 0;
- con_free_unimap(dstcon);
- q = (struct uni_pagedir *)*sconp->vc_uni_pagedir_loc;
+ con_free_unimap(dst);
+ q = (struct uni_pagedir *)*src->vc_uni_pagedir_loc;
q->refcount++;
- *dconp->vc_uni_pagedir_loc = (long)q;
+ *dst->vc_uni_pagedir_loc = (long)q;
return 0;
}
int
-con_get_unimap(int con, ushort ct, ushort *uct, struct unipair *list)
+con_get_unimap(struct vc_data *vc, ushort ct, ushort *uct, struct unipair *list)
{
int i, j, k, ect;
u16 **p1, *p2;
struct uni_pagedir *p;
- struct vc_data *conp = vc_cons[con].d;
ect = 0;
- if (*conp->vc_uni_pagedir_loc) {
- p = (struct uni_pagedir *)*conp->vc_uni_pagedir_loc;
+ if (*vc->vc_uni_pagedir_loc) {
+ p = (struct uni_pagedir *)*vc->vc_uni_pagedir_loc;
for (i = 0; i < 32; i++)
if ((p1 = p->uni_pgdir[i]))
for (j = 0; j < 32; j++)
@@ -625,16 +620,16 @@
return ((ect <= ct) ? 0 : -ENOMEM);
}
-void con_protect_unimap(int con, int rdonly)
+void con_protect_unimap(struct vc_data *vc, int rdonly)
{
struct uni_pagedir *p = (struct uni_pagedir *)
- *vc_cons[con].d->vc_uni_pagedir_loc;
+ *vc->vc_uni_pagedir_loc;
if (p) p->readonly = rdonly;
}
int
-conv_uni_to_pc(struct vc_data *conp, long ucs)
+conv_uni_to_pc(struct vc_data *vc, long ucs)
{
int h;
u16 **p1, *p2;
@@ -655,10 +650,10 @@
else if ((ucs & ~UNI_DIRECT_MASK) == UNI_DIRECT_BASE)
return ucs & UNI_DIRECT_MASK;
- if (!*conp->vc_uni_pagedir_loc)
+ if (!*vc->vc_uni_pagedir_loc)
return -3;
- p = (struct uni_pagedir *)*conp->vc_uni_pagedir_loc;
+ p = (struct uni_pagedir *)*vc->vc_uni_pagedir_loc;
if ((p1 = p->uni_pgdir[ucs >> 11]) &&
(p2 = p1[(ucs >> 6) & 0x1f]) &&
(h = p2[ucs & 0x3f]) < MAX_GLYPH)
@@ -677,7 +672,10 @@
{
int i;
- for (i = 0; i < MAX_NR_CONSOLES; i++)
- if (vc_cons_allocated(i) && !*vc_cons[i].d->vc_uni_pagedir_loc)
- con_set_default_unimap(i);
+ for (i = 0; i < MAX_NR_CONSOLES; i++) {
+ struct vc_data *vc = vc_cons[i].d;
+
+ if (vc && !*vc->vc_uni_pagedir_loc)
+ con_set_default_unimap(vc);
+ }
}
diff -Nru a/drivers/char/keyboard.c b/drivers/char/keyboard.c
--- a/drivers/char/keyboard.c Fri Oct 11 18:17:53 2002
+++ b/drivers/char/keyboard.c Fri Oct 11 18:17:53 2002
@@ -35,7 +35,6 @@
#include <linux/init.h>
#include <linux/slab.h>
-#include <linux/console_struct.h>
#include <linux/kbd_kern.h>
#include <linux/kbd_diacr.h>
#include <linux/vt_kern.h>
diff -Nru a/drivers/char/selection.c b/drivers/char/selection.c
--- a/drivers/char/selection.c Fri Oct 11 18:17:53 2002
+++ b/drivers/char/selection.c Fri Oct 11 18:17:53 2002
@@ -22,7 +22,6 @@
#include <linux/vt_kern.h>
#include <linux/consolemap.h>
-#include <linux/console_struct.h>
#include <linux/selection.h>
#ifndef MIN
@@ -288,7 +287,8 @@
*/
int paste_selection(struct tty_struct *tty)
{
- struct vt_struct *vt = (struct vt_struct *) tty->driver_data;
+ struct vc_data *vc = (struct vc_data *) tty->driver_data;
+ struct vt_struct *vt = vt_cons[vc->vc_num];
int pasted = 0, count;
DECLARE_WAITQUEUE(wait, current);
diff -Nru a/drivers/char/vc_screen.c b/drivers/char/vc_screen.c
--- a/drivers/char/vc_screen.c Fri Oct 11 18:17:53 2002
+++ b/drivers/char/vc_screen.c Fri Oct 11 18:17:53 2002
@@ -32,7 +32,6 @@
#include <linux/mm.h>
#include <linux/init.h>
#include <linux/vt_kern.h>
-#include <linux/console_struct.h>
#include <linux/selection.h>
#include <linux/kbd_kern.h>
#include <linux/console.h>
diff -Nru a/drivers/char/vt.c b/drivers/char/vt.c
--- a/drivers/char/vt.c Fri Oct 11 18:17:53 2002
+++ b/drivers/char/vt.c Fri Oct 11 18:17:53 2002
@@ -90,7 +90,6 @@
#include <linux/devfs_fs_kernel.h>
#include <linux/vt_kern.h>
#include <linux/selection.h>
-#include <linux/console_struct.h>
#include <linux/kbd_kern.h>
#include <linux/consolemap.h>
#include <linux/timer.h>
@@ -669,7 +668,7 @@
vt_cons[currcons] = (struct vt_struct *)(p+sizeof(struct vc_data));
visual_init(currcons, 1);
if (!*vc_cons[currcons].d->vc_uni_pagedir_loc)
- con_set_default_unimap(currcons);
+ con_set_default_unimap(vc_cons[currcons].d);
q = (long)kmalloc(screenbuf_size, GFP_KERNEL);
if (!q) {
kfree((char *) p);
@@ -1073,9 +1072,8 @@
* control chars if defined, don't set
* bit 8 on output.
*/
- translate = set_translate(charset == 0
- ? G0_charset
- : G1_charset,currcons);
+ set_translate(vc_cons[currcons].d, charset == 0 ?
+ G0_charset : G1_charset);
disp_ctrl = 0;
toggle_meta = 0;
break;
@@ -1083,7 +1081,7 @@
* Select first alternate font, lets
* chars < 32 be displayed as ROM chars.
*/
- translate = set_translate(IBMPC_MAP,currcons);
+ set_translate(vc_cons[currcons].d, IBMPC_MAP);
disp_ctrl = 1;
toggle_meta = 0;
break;
@@ -1091,7 +1089,7 @@
* Select second alternate font, toggle
* high bit before displaying as ROM char.
*/
- translate = set_translate(IBMPC_MAP,currcons);
+ set_translate(vc_cons[currcons].d, IBMPC_MAP);
disp_ctrl = 1;
toggle_meta = 1;
break;
@@ -1373,7 +1371,7 @@
color = s_color;
G0_charset = saved_G0;
G1_charset = saved_G1;
- translate = set_translate(charset ? G1_charset : G0_charset,currcons);
+ set_translate(vc_cons[currcons].d, charset ? G1_charset : G0_charset);
update_attr(currcons);
need_wrap = 0;
}
@@ -1389,7 +1387,7 @@
bottom = video_num_lines;
vc_state = ESnormal;
ques = 0;
- translate = set_translate(LAT1_MAP,currcons);
+ set_translate(vc_cons[currcons].d, LAT1_MAP);
G0_charset = LAT1_MAP;
G1_charset = GRAF_MAP;
charset = 0;
@@ -1474,12 +1472,12 @@
return;
case 14:
charset = 1;
- translate = set_translate(G1_charset,currcons);
+ set_translate(vc_cons[currcons].d, G1_charset);
disp_ctrl = 1;
return;
case 15:
charset = 0;
- translate = set_translate(G0_charset,currcons);
+ set_translate(vc_cons[currcons].d, G0_charset);
disp_ctrl = 0;
return;
case 24: case 26:
@@ -1786,7 +1784,7 @@
else if (c == 'K')
G0_charset = USER_MAP;
if (charset == 0)
- translate = set_translate(G0_charset,currcons);
+ set_translate(vc_cons[currcons].d, G0_charset);
vc_state = ESnormal;
return;
case ESsetG1:
@@ -1799,7 +1797,7 @@
else if (c == 'K')
G1_charset = USER_MAP;
if (charset == 1)
- translate = set_translate(G1_charset,currcons);
+ set_translate(vc_cons[currcons].d, G1_charset);
vc_state = ESnormal;
return;
default:
@@ -1834,9 +1832,9 @@
#endif
int c, tc, ok, n = 0, draw_x = -1;
- unsigned int currcons;
+ unsigned int currcons = minor(tty->device) - tty->driver.minor_start;
unsigned long draw_from = 0, draw_to = 0;
- struct vt_struct *vt = (struct vt_struct *)tty->driver_data;
+ struct vc_data *vc = (struct vc_data *)tty->driver_data;
u16 himask, charmask;
const unsigned char *orig_buf = NULL;
int orig_count;
@@ -1844,13 +1842,12 @@
if (in_interrupt())
return count;
- currcons = vt->vc_num;
- if (!vc_cons_allocated(currcons)) {
+ if (!vc) {
/* could this happen? */
static int error = 0;
if (!error) {
error = 1;
- printk("con_write: tty %d not allocated\n", currcons+1);
+ printk("con_write: tty %d not allocated\n", currcons + 1);
}
return 0;
}
@@ -2308,7 +2305,8 @@
static void con_unthrottle(struct tty_struct *tty)
{
- struct vt_struct *vt = (struct vt_struct *) tty->driver_data;
+ struct vc_data *vc = (struct vc_data *) tty->driver_data;
+ struct vt_struct *vt = vt_cons[vc->vc_num];
wake_up_interruptible(&vt->paste_wait);
}
@@ -2345,7 +2343,7 @@
static void con_flush_chars(struct tty_struct *tty)
{
- struct vt_struct *vt;
+ struct vc_data *vc;
if (in_interrupt()) /* from flush_to_ldisc */
return;
@@ -2354,9 +2352,9 @@
/* if we race with con_close(), vt may be null */
acquire_console_sem();
- vt = (struct vt_struct *)tty->driver_data;
- if (vt)
- set_cursor(vt->vc_num);
+ vc = (struct vc_data *)tty->driver_data;
+ if (vc)
+ set_cursor(vc->vc_num);
release_console_sem();
}
@@ -2375,7 +2373,7 @@
return i;
vt_cons[currcons]->vc_num = currcons;
- tty->driver_data = vt_cons[currcons];
+ tty->driver_data = vc_cons[currcons].d;
vc_cons[currcons].d->vc_tty = tty;
if (!tty->winsize.ws_row && !tty->winsize.ws_col) {
@@ -2389,15 +2387,15 @@
static void con_close(struct tty_struct *tty, struct file * filp)
{
- struct vt_struct *vt;
+ struct vc_data *vc;
if (!tty)
return;
if (tty->count != 1) return;
vcs_make_devfs (minor(tty->device) - tty->driver.minor_start, 1);
- vt = (struct vt_struct*)tty->driver_data;
- if (vt)
- vc_cons[vt->vc_num].d->vc_tty = NULL;
+ vc = (struct vc_data *)tty->driver_data;
+ if (vc)
+ vc_cons[vc->vc_num].d->vc_tty = NULL;
tty->driver_data = 0;
}
@@ -2845,12 +2843,13 @@
#define max_font_size 65536
-int con_font_op(int currcons, struct console_font_op *op)
+int con_font_op(struct vc_data *vc, struct console_font_op *op)
{
- int rc = -EINVAL;
+ struct console_font_op old_op;
int size = max_font_size, set;
+ int currcons = vc->vc_num;
+ int rc = -EINVAL;
u8 *temp = NULL;
- struct console_font_op old_op;
if (vt_cons[currcons]->vc_mode != KD_TEXT)
goto quit;
@@ -2891,7 +2890,7 @@
} else if (op->op == KD_FONT_OP_GET)
set = 0;
else
- return sw->con_font_op(vc_cons[currcons].d, op);
+ return sw->con_font_op(vc, op);
if (op->data) {
temp = kmalloc(size, GFP_KERNEL);
if (!temp)
@@ -2904,7 +2903,7 @@
}
acquire_console_sem();
- rc = sw->con_font_op(vc_cons[currcons].d, op);
+ rc = sw->con_font_op(vc, op);
release_console_sem();
op->data = old_op.data;
diff -Nru a/drivers/char/vt_ioctl.c b/drivers/char/vt_ioctl.c
--- a/drivers/char/vt_ioctl.c Fri Oct 11 18:17:53 2002
+++ b/drivers/char/vt_ioctl.c Fri Oct 11 18:17:53 2002
@@ -279,7 +279,7 @@
}
static inline int
-do_fontx_ioctl(int cmd, struct consolefontdesc *user_cfd, int perm)
+do_fontx_ioctl(struct vc_data *vc, int cmd, struct consolefontdesc *user_cfd, int perm)
{
struct consolefontdesc cfdarg;
struct console_font_op op;
@@ -298,7 +298,7 @@
op.height = cfdarg.charheight;
op.charcount = cfdarg.charcount;
op.data = cfdarg.chardata;
- return con_font_op(fg_console, &op);
+ return con_font_op(vc, &op);
case GIO_FONTX: {
op.op = KD_FONT_OP_GET;
op.flags = KD_FONT_FLAG_OLD;
@@ -306,7 +306,7 @@
op.height = cfdarg.charheight;
op.charcount = cfdarg.charcount;
op.data = cfdarg.chardata;
- i = con_font_op(fg_console, &op);
+ i = con_font_op(vc, &op);
if (i)
return i;
cfdarg.charheight = op.height;
@@ -320,7 +320,7 @@
}
static inline int
-do_unimap_ioctl(int cmd, struct unimapdesc *user_ud,int perm)
+do_unimap_ioctl(struct vc_data *vc, int cmd, struct unimapdesc *user_ud,int perm)
{
struct unimapdesc tmp;
int i = 0;
@@ -336,9 +336,9 @@
case PIO_UNIMAP:
if (!perm)
return -EPERM;
- return con_set_unimap(fg_console, tmp.entry_ct, tmp.entries);
+ return con_set_unimap(vc, tmp.entry_ct, tmp.entries);
case GIO_UNIMAP:
- return con_get_unimap(fg_console, tmp.entry_ct, &(user_ud->entry_ct), tmp.entries);
+ return con_get_unimap(vc, tmp.entry_ct, &(user_ud->entry_ct), tmp.entries);
}
return 0;
}
@@ -350,13 +350,13 @@
int vt_ioctl(struct tty_struct *tty, struct file * file,
unsigned int cmd, unsigned long arg)
{
- int i, perm;
+ struct vc_data *vc = (struct vc_data *)tty->driver_data;
+ struct kbd_struct * kbd;
unsigned int console;
unsigned char ucval;
- struct kbd_struct * kbd;
- struct vt_struct *vt = (struct vt_struct *)tty->driver_data;
+ int i, perm;
- console = vt->vc_num;
+ console = vc->vc_num;
if (!vc_cons_allocated(console)) /* impossible? */
return -ENOIOCTLCMD;
@@ -869,7 +869,7 @@
op.height = 0;
op.charcount = 256;
op.data = (char *) arg;
- return con_font_op(fg_console, &op);
+ return con_font_op(vc, &op);
}
case GIO_FONT: {
@@ -880,7 +880,7 @@
op.height = 32;
op.charcount = 256;
op.data = (char *) arg;
- return con_font_op(fg_console, &op);
+ return con_font_op(vc, &op);
}
case PIO_CMAP:
@@ -893,7 +893,7 @@
case PIO_FONTX:
case GIO_FONTX:
- return do_fontx_ioctl(cmd, (struct consolefontdesc *)arg, perm);
+ return do_fontx_ioctl(vc, cmd, (struct consolefontdesc *)arg, perm);
case PIO_FONTRESET:
{
@@ -909,9 +909,9 @@
struct console_font_op op;
op.op = KD_FONT_OP_SET_DEFAULT;
op.data = NULL;
- i = con_font_op(fg_console, &op);
+ i = con_font_op(vc, &op);
if (i) return i;
- con_set_default_unimap(fg_console);
+ con_set_default_unimap(vc);
return 0;
}
#endif
@@ -923,7 +923,7 @@
return -EFAULT;
if (!perm && op.op != KD_FONT_OP_GET)
return -EPERM;
- i = con_font_op(console, &op);
+ i = con_font_op(vc, &op);
if (i) return i;
if (copy_to_user((void *) arg, &op, sizeof(op)))
return -EFAULT;
@@ -933,18 +933,18 @@
case PIO_SCRNMAP:
if (!perm)
return -EPERM;
- return con_set_trans_old((unsigned char *)arg);
+ return con_set_trans_old(vc, (unsigned char *)arg);
case GIO_SCRNMAP:
- return con_get_trans_old((unsigned char *)arg);
+ return con_get_trans_old(vc, (unsigned char *)arg);
case PIO_UNISCRNMAP:
if (!perm)
return -EPERM;
- return con_set_trans_new((unsigned short *)arg);
+ return con_set_trans_new(vc, (unsigned short *)arg);
case GIO_UNISCRNMAP:
- return con_get_trans_new((unsigned short *)arg);
+ return con_get_trans_new(vc, (unsigned short *)arg);
case PIO_UNIMAPCLR:
{ struct unimapinit ui;
@@ -952,13 +952,13 @@
return -EPERM;
i = copy_from_user(&ui, (void *)arg, sizeof(struct unimapinit));
if (i) return -EFAULT;
- con_clear_unimap(fg_console, &ui);
+ con_clear_unimap(vc, &ui);
return 0;
}
case PIO_UNIMAP:
case GIO_UNIMAP:
- return do_unimap_ioctl(cmd, (struct unimapdesc *)arg, perm);
+ return do_unimap_ioctl(vc, cmd, (struct unimapdesc *)arg, perm);
case VT_LOCKSWITCH:
if (!capable(CAP_SYS_TTY_CONFIG))
diff -Nru a/drivers/video/dummycon.c b/drivers/video/dummycon.c
--- a/drivers/video/dummycon.c Fri Oct 11 18:17:53 2002
+++ b/drivers/video/dummycon.c Fri Oct 11 18:17:53 2002
@@ -9,7 +9,6 @@
#include <linux/kdev_t.h>
#include <linux/tty.h>
#include <linux/console.h>
-#include <linux/console_struct.h>
#include <linux/vt_kern.h>
#include <linux/init.h>
diff -Nru a/drivers/video/mdacon.c b/drivers/video/mdacon.c
--- a/drivers/video/mdacon.c Fri Oct 11 18:17:53 2002
+++ b/drivers/video/mdacon.c Fri Oct 11 18:17:53 2002
@@ -33,7 +33,6 @@
#include <linux/module.h>
#include <linux/tty.h>
#include <linux/console.h>
-#include <linux/console_struct.h>
#include <linux/string.h>
#include <linux/kd.h>
#include <linux/slab.h>
@@ -377,7 +376,7 @@
static void mdacon_deinit(struct vc_data *c)
{
- /* con_set_default_unimap(c->vc_num); */
+ /* con_set_default_unimap(c); */
if (mda_display_fg == c)
mda_display_fg = NULL;
diff -Nru a/drivers/video/newport_con.c b/drivers/video/newport_con.c
--- a/drivers/video/newport_con.c Fri Oct 11 18:17:53 2002
+++ b/drivers/video/newport_con.c Fri Oct 11 18:17:53 2002
@@ -16,7 +16,6 @@
#include <linux/kd.h>
#include <linux/selection.h>
#include <linux/console.h>
-#include <linux/console_struct.h>
#include <linux/vt_kern.h>
#include <linux/mm.h>
#include <linux/module.h>
diff -Nru a/drivers/video/promcon.c b/drivers/video/promcon.c
--- a/drivers/video/promcon.c Fri Oct 11 18:17:53 2002
+++ b/drivers/video/promcon.c Fri Oct 11 18:17:53 2002
@@ -15,7 +15,6 @@
#include <linux/slab.h>
#include <linux/delay.h>
#include <linux/console.h>
-#include <linux/console_struct.h>
#include <linux/vt_kern.h>
#include <linux/selection.h>
#include <linux/fb.h>
@@ -156,9 +155,9 @@
k++;
}
set_fs(KERNEL_DS);
- con_clear_unimap(conp->vc_num, NULL);
- con_set_unimap(conp->vc_num, k, p);
- con_protect_unimap(conp->vc_num, 1);
+ con_clear_unimap(conp, NULL);
+ con_set_unimap(conp, k, p);
+ con_protect_unimap(conp, 1);
set_fs(old_fs);
kfree(p);
}
@@ -176,7 +175,7 @@
p = *conp->vc_uni_pagedir_loc;
if (conp->vc_uni_pagedir_loc == &conp->vc_uni_pagedir ||
!--conp->vc_uni_pagedir_loc[1])
- con_free_unimap(conp->vc_num);
+ con_free_unimap(conp);
conp->vc_uni_pagedir_loc = promcon_uni_pagedir;
promcon_uni_pagedir[1]++;
if (!promcon_uni_pagedir[0] && p) {
@@ -193,9 +192,9 @@
{
/* When closing the last console, reset video origin */
if (!--promcon_uni_pagedir[1])
- con_free_unimap(conp->vc_num);
+ con_free_unimap(conp);
conp->vc_uni_pagedir_loc = &conp->vc_uni_pagedir;
- con_set_default_unimap(conp->vc_num);
+ con_set_default_unimap(conp);
}
static int
diff -Nru a/drivers/video/sticon.c b/drivers/video/sticon.c
--- a/drivers/video/sticon.c Fri Oct 11 18:17:53 2002
+++ b/drivers/video/sticon.c Fri Oct 11 18:17:53 2002
@@ -49,7 +49,6 @@
#include <linux/kernel.h>
#include <linux/tty.h>
#include <linux/console.h>
-#include <linux/console_struct.h>
#include <linux/errno.h>
#include <linux/vt_kern.h>
#include <linux/selection.h>
diff -Nru a/drivers/video/vgacon.c b/drivers/video/vgacon.c
--- a/drivers/video/vgacon.c Fri Oct 11 18:17:53 2002
+++ b/drivers/video/vgacon.c Fri Oct 11 18:17:53 2002
@@ -41,7 +41,6 @@
#include <linux/kernel.h>
#include <linux/tty.h>
#include <linux/console.h>
-#include <linux/console_struct.h>
#include <linux/string.h>
#include <linux/kd.h>
#include <linux/slab.h>
@@ -334,11 +333,11 @@
p = *c->vc_uni_pagedir_loc;
if (c->vc_uni_pagedir_loc == &c->vc_uni_pagedir ||
!--c->vc_uni_pagedir_loc[1])
- con_free_unimap(c->vc_num);
+ con_free_unimap(c);
c->vc_uni_pagedir_loc = vgacon_uni_pagedir;
vgacon_uni_pagedir[1]++;
if (!vgacon_uni_pagedir[0] && p)
- con_set_default_unimap(c->vc_num);
+ con_set_default_unimap(c);
}
static inline void vga_set_mem_top(struct vc_data *c)
@@ -352,10 +351,10 @@
if (!--vgacon_uni_pagedir[1]) {
c->vc_visible_origin = vga_vram_base;
vga_set_mem_top(c);
- con_free_unimap(c->vc_num);
+ con_free_unimap(c);
}
c->vc_uni_pagedir_loc = &c->vc_uni_pagedir;
- con_set_default_unimap(c->vc_num);
+ con_set_default_unimap(c);
}
static u8 vgacon_build_attr(struct vc_data *c, u8 color, u8 intensity, u8 blink, u8 underline, u8 reverse)
diff -Nru a/include/linux/consolemap.h b/include/linux/consolemap.h
--- a/include/linux/consolemap.h Fri Oct 11 18:17:54 2002
+++ b/include/linux/consolemap.h Fri Oct 11 18:17:54 2002
@@ -10,6 +10,6 @@
struct vc_data;
-extern unsigned char inverse_translate(struct vc_data *conp, int glyph);
-extern unsigned short *set_translate(int m,int currcons);
-extern int conv_uni_to_pc(struct vc_data *conp, long ucs);
+extern unsigned char inverse_translate(struct vc_data *vc, int glyph);
+extern void set_translate(struct vc_data *vc, int m);
+extern int conv_uni_to_pc(struct vc_data *vc, long ucs);
diff -Nru a/include/linux/vt_kern.h b/include/linux/vt_kern.h
--- a/include/linux/vt_kern.h Fri Oct 11 18:17:53 2002
+++ b/include/linux/vt_kern.h Fri Oct 11 18:17:53 2002
@@ -7,6 +7,7 @@
*/
#include <linux/config.h>
+#include <linux/console_struct.h>
#include <linux/vt.h>
#include <linux/kd.h>
#include <linux/tty.h>
@@ -51,7 +52,7 @@
void do_blank_screen(int gfx_mode);
void unblank_screen(void);
void poke_blanked_console(void);
-int con_font_op(int currcons, struct console_font_op *op);
+int con_font_op(struct vc_data *vc, struct console_font_op *op);
int con_set_cmap(unsigned char *cmap);
int con_get_cmap(unsigned char *cmap);
void scrollback(int);
@@ -69,17 +70,17 @@
struct unimapinit;
struct unipair;
-int con_set_trans_old(unsigned char * table);
-int con_get_trans_old(unsigned char * table);
-int con_set_trans_new(unsigned short * table);
-int con_get_trans_new(unsigned short * table);
-int con_clear_unimap(int currcons, struct unimapinit *ui);
-int con_set_unimap(int currcons, ushort ct, struct unipair *list);
-int con_get_unimap(int currcons, ushort ct, ushort *uct, struct unipair *list);
-int con_set_default_unimap(int currcons);
-void con_free_unimap(int currcons);
-void con_protect_unimap(int currcons, int rdonly);
-int con_copy_unimap(int dstcons, int srccons);
+int con_set_trans_old(struct vc_data *vc, unsigned char * table);
+int con_get_trans_old(struct vc_data *vc, unsigned char * table);
+int con_set_trans_new(struct vc_data *vc, unsigned short * table);
+int con_get_trans_new(struct vc_data *vc, unsigned short * table);
+int con_clear_unimap(struct vc_data *vc, struct unimapinit *ui);
+int con_set_unimap(struct vc_data *vc, ushort ct, struct unipair *list);
+int con_get_unimap(struct vc_data *vc, ushort ct, ushort *uct, struct unipair *list);
+int con_set_default_unimap(struct vc_data *vc);
+void con_free_unimap(struct vc_data *vc);
+void con_protect_unimap(struct vc_data *vc, int rdonly);
+int con_copy_unimap(struct vc_data *dst, struct vc_data *src);
/* vt.c */
diff -Nru a/include/video/fbcon.h b/include/video/fbcon.h
--- a/include/video/fbcon.h Fri Oct 11 18:17:53 2002
+++ b/include/video/fbcon.h Fri Oct 11 18:17:53 2002
@@ -13,8 +13,8 @@
#include <linux/config.h>
#include <linux/types.h>
-#include <linux/console_struct.h>
#include <linux/vt_buffer.h>
+#include <linux/vt_kern.h>
#include <asm/io.h>
===================================================================
This BitKeeper patch contains the following changesets:
1.714.6.3
## Wrapped with gzip_uu ##
begin 664 bkpatch2473
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
`
end
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
This archive was generated by hypermail 2b29 : Tue Oct 15 2002 - 22:00:42 EST