coco3: tty: add getting/setting graphics mode to ioctl.
authorBrett Gordon <beretta42@gmail.com>
Wed, 7 Oct 2015 15:29:24 +0000 (11:29 -0400)
committerBrett Gordon <beretta42@gmail.com>
Wed, 7 Oct 2015 15:29:24 +0000 (11:29 -0400)
Kernel/platform-coco3/devtty.c

index f1d6f60..0fe5055 100644 (file)
@@ -497,11 +497,24 @@ unsigned char vt_map(unsigned char c)
 
 int gfx_ioctl(uint8_t minor, uarg_t arg, char *ptr)
 {
+       if ( minor > 2 ) goto error; /* remove once DW get its own ioctl() */
        if (arg >> 8 != 0x03)
                return vt_ioctl(minor, arg, ptr);
        if (arg == GFXIOC_GETINFO)
-               return uput(&display, ptr, sizeof(display));
-       udata.u_error = ENOTTY;
+               return uput( ptytab[minor-1].fdisp, ptr, sizeof( struct display));
+       if (arg == GFXIOC_GETMODE){
+               uint8_t m=ugetc(ptr);
+               if( m > 3 ) goto error;
+               return uput( &fmodes[m], ptr, sizeof( struct display));
+       }
+       if (arg == GFXIOC_SETMODE){
+               uint8_t m=ugetc(ptr);
+               if( m > 3 ) goto error;
+               memcpy( &(ptytab[minor-1].gime), &(mode[m]), sizeof( struct mode_s ) );
+               if( minor == curminor ) apply_gime( minor );
+               return 0;
+       }
+ error:        udata.u_error = ENOTTY;
        return -1;
 }