1 /*- 2 * Copyright (c) 1988 University of Utah. 3 * Copyright (c) 1992 OMRON Corporation. 4 * Copyright (c) 1990,1992 The Regents of the University of California. 5 * All rights reserved. 6 * 7 * %sccs.include.redist.c% 8 * 9 * from: hp/dev/grf.c 7.13 (Berkeley) 7/12/92 10 * 11 * @(#)fb.c 7.3 (Berkeley) 02/02/93 12 */ 13 14 /* 15 * fb.c -- frame-buffer device driver 16 * by A.Fujita, Dec-16-1992 17 */ 18 19 #include <sys/param.h> 20 #include <sys/proc.h> 21 #include <sys/ioctl.h> 22 #include <luna68k/dev/fbio.h> 23 24 #include "bmc.h" 25 26 extern int hz; 27 28 int fb_erase_screen(); 29 30 volatile struct fb_rfc *rfcPtr = (struct fb_rfc *) 0xB1000000; 31 static struct fb_rfc rfcVal; 32 33 int 34 fbopen(dev, flags, mode, p) 35 dev_t dev; 36 int flags, mode; 37 struct proc *p; 38 { 39 fb_erase_screen(); 40 41 return(0); 42 } 43 44 int 45 fbclose(dev, flags, mode, p) 46 dev_t dev; 47 int flags, mode; 48 struct proc *p; 49 { 50 fb_adjust(7, -27); 51 52 timeout(fb_erase_screen, (caddr_t)0, hz); 53 54 return(0); 55 } 56 57 int 58 fbioctl(dev, cmd, data, flags, p) 59 dev_t dev; 60 int cmd; 61 caddr_t data; 62 int flags; 63 struct proc *p; 64 { 65 struct fb_rfc *rfcp; 66 int error; 67 68 error = 0; 69 switch (cmd) { 70 71 case FBIOSETRFCT: 72 *rfcPtr = rfcVal = *((struct fb_rfc *) data); 73 break; 74 75 case FBIOGETRFCT: 76 *(struct fb_rfc *)data = rfcVal; 77 break; 78 79 default: 80 error = EINVAL; 81 break; 82 83 } 84 return(error); 85 } 86 87 fb_adjust(hcnt, vcnt) 88 int hcnt, vcnt; 89 { 90 rfcVal.rfc_hcnt = hcnt; /* shift left 16 dot */ 91 rfcVal.rfc_vcnt = vcnt; /* shift down 1 dot */ 92 93 *rfcPtr = rfcVal; 94 } 95 96 #define PL_WIDTH 64 /* Plane Width (long) */ 97 98 #define SB_HIGHT 1024 /* Screen Hight (Bit) */ 99 #define SL_WIDTH 40 /* Screen Width (Long) */ 100 101 #define SKIP_NEXT_LINE(addr) ( addr += (PL_WIDTH - SL_WIDTH) ) 102 103 fb_erase_screen() 104 { 105 volatile register u_long *lp = (u_long *) 0xB1080008; 106 107 register int i, j; 108 109 for (i = 0; i < SB_HIGHT; i++) { 110 for (j = 0; j < SL_WIDTH; j++) 111 *lp++ = 0; 112 SKIP_NEXT_LINE(lp); 113 } 114 115 return; 116 } 117 118 int 119 fbselect(dev, rw) 120 dev_t dev; 121 int rw; 122 { 123 return(0); 124 } 125 126 int 127 fbmap(dev, off, prot) 128 dev_t dev; 129 int off, prot; 130 { 131 return(((u_int) 0xB10C0000 + off) >> PGSHIFT); 132 } 133