diff options
Diffstat (limited to 'drivers/tty/vt/vt.c')
-rw-r--r-- | drivers/tty/vt/vt.c | 68 |
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 | ||
3895 | static 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 | ||
3930 | int con_set_cmap(unsigned char __user *arg) | 3900 | int 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 | ||
3941 | int con_get_cmap(unsigned char __user *arg) | 3929 | int 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 | ||
3952 | void reset_palette(struct vc_data *vc) | 3948 | void reset_palette(struct vc_data *vc) |