aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/tty/vt/vt.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/tty/vt/vt.c')
-rw-r--r--drivers/tty/vt/vt.c68
1 files changed, 32 insertions, 36 deletions
diff --git a/drivers/tty/vt/vt.c b/drivers/tty/vt/vt.c
index 2156188db4a6..84cbf298c094 100644
--- a/drivers/tty/vt/vt.c
+++ b/drivers/tty/vt/vt.c
@@ -3892,36 +3892,6 @@ static void set_palette(struct vc_data *vc)
3892 vc->vc_sw->con_set_palette(vc, color_table); 3892 vc->vc_sw->con_set_palette(vc, color_table);
3893} 3893}
3894 3894
3895static int set_get_cmap(unsigned char __user *arg, int set)
3896{
3897 int i, j, k;
3898
3899 WARN_CONSOLE_UNLOCKED();
3900
3901 for (i = 0; i < 16; i++)
3902 if (set) {
3903 get_user(default_red[i], arg++);
3904 get_user(default_grn[i], arg++);
3905 get_user(default_blu[i], arg++);
3906 } else {
3907 put_user(default_red[i], arg++);
3908 put_user(default_grn[i], arg++);
3909 put_user(default_blu[i], arg++);
3910 }
3911 if (set) {
3912 for (i = 0; i < MAX_NR_CONSOLES; i++)
3913 if (vc_cons_allocated(i)) {
3914 for (j = k = 0; j < 16; j++) {
3915 vc_cons[i].d->vc_palette[k++] = default_red[j];
3916 vc_cons[i].d->vc_palette[k++] = default_grn[j];
3917 vc_cons[i].d->vc_palette[k++] = default_blu[j];
3918 }
3919 set_palette(vc_cons[i].d);
3920 }
3921 }
3922 return 0;
3923}
3924
3925/* 3895/*
3926 * Load palette into the DAC registers. arg points to a colour 3896 * Load palette into the DAC registers. arg points to a colour
3927 * map, 3 bytes per colour, 16 colours, range from 0 to 255. 3897 * map, 3 bytes per colour, 16 colours, range from 0 to 255.
@@ -3929,24 +3899,50 @@ static int set_get_cmap(unsigned char __user *arg, int set)
3929 3899
3930int con_set_cmap(unsigned char __user *arg) 3900int con_set_cmap(unsigned char __user *arg)
3931{ 3901{
3932 int rc; 3902 int i, j, k;
3903 unsigned char colormap[3*16];
3904
3905 if (copy_from_user(colormap, arg, sizeof(colormap)))
3906 return -EFAULT;
3933 3907
3934 console_lock(); 3908 console_lock();
3935 rc = set_get_cmap (arg,1); 3909 for (i = k = 0; i < 16; i++) {
3910 default_red[i] = colormap[k++];
3911 default_grn[i] = colormap[k++];
3912 default_blu[i] = colormap[k++];
3913 }
3914 for (i = 0; i < MAX_NR_CONSOLES; i++) {
3915 if (!vc_cons_allocated(i))
3916 continue;
3917 for (j = k = 0; j < 16; j++) {
3918 vc_cons[i].d->vc_palette[k++] = default_red[j];
3919 vc_cons[i].d->vc_palette[k++] = default_grn[j];
3920 vc_cons[i].d->vc_palette[k++] = default_blu[j];
3921 }
3922 set_palette(vc_cons[i].d);
3923 }
3936 console_unlock(); 3924 console_unlock();
3937 3925
3938 return rc; 3926 return 0;
3939} 3927}
3940 3928
3941int con_get_cmap(unsigned char __user *arg) 3929int con_get_cmap(unsigned char __user *arg)
3942{ 3930{
3943 int rc; 3931 int i, k;
3932 unsigned char colormap[3*16];
3944 3933
3945 console_lock(); 3934 console_lock();
3946 rc = set_get_cmap (arg,0); 3935 for (i = k = 0; i < 16; i++) {
3936 colormap[k++] = default_red[i];
3937 colormap[k++] = default_grn[i];
3938 colormap[k++] = default_blu[i];
3939 }
3947 console_unlock(); 3940 console_unlock();
3948 3941
3949 return rc; 3942 if (copy_to_user(arg, colormap, sizeof(colormap)))
3943 return -EFAULT;
3944
3945 return 0;
3950} 3946}
3951 3947
3952void reset_palette(struct vc_data *vc) 3948void reset_palette(struct vc_data *vc)