1 /*- 2 * Copyright (c) 1988 University of Utah. 3 * Copyright (c) 1992 OMRON Corporation. 4 * Copyright (c) 1993, 19901992 5 * The Regents of the University of California. 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 8.1 (Berkeley) 06/10/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 extern int hz; 25 26 int fb_erase_screen(); 27 28 volatile struct fb_rfc *rfcPtr = (struct fb_rfc *) 0xB1000000; 29 static struct fb_rfc rfcVal; 30 31 int 32 fbopen(dev, flags, mode, p) 33 dev_t dev; 34 int flags, mode; 35 struct proc *p; 36 { 37 fb_erase_screen(); 38 39 return(0); 40 } 41 42 int 43 fbclose(dev, flags, mode, p) 44 dev_t dev; 45 int flags, mode; 46 struct proc *p; 47 { 48 fb_adjust(7, -27); 49 50 timeout(fb_erase_screen, (caddr_t)0, hz); 51 52 return(0); 53 } 54 55 int 56 fbioctl(dev, cmd, data, flags, p) 57 dev_t dev; 58 int cmd; 59 caddr_t data; 60 int flags; 61 struct proc *p; 62 { 63 struct fb_rfc *rfcp; 64 int error; 65 66 error = 0; 67 switch (cmd) { 68 69 case FBIOSETRFCT: 70 *rfcPtr = rfcVal = *((struct fb_rfc *) data); 71 break; 72 73 case FBIOGETRFCT: 74 *(struct fb_rfc *)data = rfcVal; 75 break; 76 77 default: 78 error = EINVAL; 79 break; 80 81 } 82 return(error); 83 } 84 85 fb_adjust(hcnt, vcnt) 86 int hcnt, vcnt; 87 { 88 rfcVal.rfc_hcnt = hcnt; /* shift left 16 dot */ 89 rfcVal.rfc_vcnt = vcnt; /* shift down 1 dot */ 90 91 *rfcPtr = rfcVal; 92 } 93 94 #define PL_WIDTH 64 /* Plane Width (long) */ 95 96 #define SB_HIGHT 1024 /* Screen Hight (Bit) */ 97 #define SL_WIDTH 40 /* Screen Width (Long) */ 98 99 #define SKIP_NEXT_LINE(addr) ( addr += (PL_WIDTH - SL_WIDTH) ) 100 101 fb_erase_screen() 102 { 103 volatile register u_long *lp = (u_long *) 0xB1080008; 104 105 register int i, j; 106 107 for (i = 0; i < SB_HIGHT; i++) { 108 for (j = 0; j < SL_WIDTH; j++) 109 *lp++ = 0; 110 SKIP_NEXT_LINE(lp); 111 } 112 113 return; 114 } 115 116 int 117 fbselect(dev, rw) 118 dev_t dev; 119 int rw; 120 { 121 return(0); 122 } 123 124 int 125 fbmap(dev, off, prot) 126 dev_t dev; 127 int off, prot; 128 { 129 return(((u_int) 0xB10C0000 + off) >> PGSHIFT); 130 } 131