summaryrefslogtreecommitdiffstats
path: root/sys
diff options
context:
space:
mode:
Diffstat (limited to 'sys')
-rw-r--r--sys/dev/syscons/syscons.c22
-rw-r--r--sys/i386/isa/syscons.c22
-rw-r--r--sys/isa/syscons.c22
3 files changed, 60 insertions, 6 deletions
diff --git a/sys/dev/syscons/syscons.c b/sys/dev/syscons/syscons.c
index 68e50f7..0be135f 100644
--- a/sys/dev/syscons/syscons.c
+++ b/sys/dev/syscons/syscons.c
@@ -34,7 +34,7 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $Id: syscons.c,v 1.55 1994/09/24 21:29:38 ache Exp $
+ * $Id: syscons.c,v 1.56 1994/09/25 02:06:51 ache Exp $
*/
#include "sc.h"
@@ -591,7 +591,25 @@ pcioctl(dev_t dev, int cmd, caddr_t data, int flag, struct proc *p)
if (!crtc_vga)
return ENXIO;
- scp->mode = cmd & 0xFF;
+ cmd &= 0xFF;
+ i = cmd < M_VGA_C80x50 ?
+ *(video_mode_ptr + (cmd*64) + 2) : 0x08;
+ switch (i) {
+ default:
+ case 0x08:
+ if (!(fonts_loaded & FONT_8_LOADED))
+ return EINVAL;
+ break;
+ case 0x0E:
+ if (!(fonts_loaded & FONT_14_LOADED))
+ return EINVAL;
+ break;
+ case 0x10:
+ if (!(fonts_loaded & FONT_16_LOADED))
+ return EINVAL;
+ break;
+ }
+ scp->mode = cmd;
scp->status &= ~UNKNOWN_MODE; /* text mode */
if (scp->mode < M_VGA_C80x50) {
scp->xsize = *(video_mode_ptr + (scp->mode*64));
diff --git a/sys/i386/isa/syscons.c b/sys/i386/isa/syscons.c
index 68e50f7..0be135f 100644
--- a/sys/i386/isa/syscons.c
+++ b/sys/i386/isa/syscons.c
@@ -34,7 +34,7 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $Id: syscons.c,v 1.55 1994/09/24 21:29:38 ache Exp $
+ * $Id: syscons.c,v 1.56 1994/09/25 02:06:51 ache Exp $
*/
#include "sc.h"
@@ -591,7 +591,25 @@ pcioctl(dev_t dev, int cmd, caddr_t data, int flag, struct proc *p)
if (!crtc_vga)
return ENXIO;
- scp->mode = cmd & 0xFF;
+ cmd &= 0xFF;
+ i = cmd < M_VGA_C80x50 ?
+ *(video_mode_ptr + (cmd*64) + 2) : 0x08;
+ switch (i) {
+ default:
+ case 0x08:
+ if (!(fonts_loaded & FONT_8_LOADED))
+ return EINVAL;
+ break;
+ case 0x0E:
+ if (!(fonts_loaded & FONT_14_LOADED))
+ return EINVAL;
+ break;
+ case 0x10:
+ if (!(fonts_loaded & FONT_16_LOADED))
+ return EINVAL;
+ break;
+ }
+ scp->mode = cmd;
scp->status &= ~UNKNOWN_MODE; /* text mode */
if (scp->mode < M_VGA_C80x50) {
scp->xsize = *(video_mode_ptr + (scp->mode*64));
diff --git a/sys/isa/syscons.c b/sys/isa/syscons.c
index 68e50f7..0be135f 100644
--- a/sys/isa/syscons.c
+++ b/sys/isa/syscons.c
@@ -34,7 +34,7 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $Id: syscons.c,v 1.55 1994/09/24 21:29:38 ache Exp $
+ * $Id: syscons.c,v 1.56 1994/09/25 02:06:51 ache Exp $
*/
#include "sc.h"
@@ -591,7 +591,25 @@ pcioctl(dev_t dev, int cmd, caddr_t data, int flag, struct proc *p)
if (!crtc_vga)
return ENXIO;
- scp->mode = cmd & 0xFF;
+ cmd &= 0xFF;
+ i = cmd < M_VGA_C80x50 ?
+ *(video_mode_ptr + (cmd*64) + 2) : 0x08;
+ switch (i) {
+ default:
+ case 0x08:
+ if (!(fonts_loaded & FONT_8_LOADED))
+ return EINVAL;
+ break;
+ case 0x0E:
+ if (!(fonts_loaded & FONT_14_LOADED))
+ return EINVAL;
+ break;
+ case 0x10:
+ if (!(fonts_loaded & FONT_16_LOADED))
+ return EINVAL;
+ break;
+ }
+ scp->mode = cmd;
scp->status &= ~UNKNOWN_MODE; /* text mode */
if (scp->mode < M_VGA_C80x50) {
scp->xsize = *(video_mode_ptr + (scp->mode*64));
OpenPOWER on IntegriCloud