summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrey A. Chernov <ache@FreeBSD.org>1994-09-27 01:50:07 +0000
committerAndrey A. Chernov <ache@FreeBSD.org>1994-09-27 01:50:07 +0000
commit38ddc3a6d6dfa77c1df83ea0faf2ff79c46973ef (patch)
tree3f91bd605e9e56793bf8e89c78eda43bca99e48c
parent255318a894151d22949adb1424bdb28f251d8d02 (diff)
Notes
-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 68e50f76af33..0be135f4add1 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 68e50f76af33..0be135f4add1 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 68e50f76af33..0be135f4add1 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));