• Home
  • Raw
  • Download

Lines Matching +full:misc +full:- +full:latch

2  * linux/drivers/video/vga16.c -- VGA 16-color framebuffer driver
6 * Based on VESA framebuffer (c) 1998 Gerd Knorr <kraxel@goldbach.in-berlin.de>
34 /* --------------------------------------------------------------------- */
45 unsigned char CrtCtrlIndex; /* CRT-Contr. Index reg. */
47 unsigned char HorizontalTotal; /* CRT-Controller:00h */
48 unsigned char HorizDisplayEnd; /* CRT-Controller:01h */
49 unsigned char StartHorizRetrace;/* CRT-Controller:04h */
50 unsigned char EndHorizRetrace; /* CRT-Controller:05h */
51 unsigned char Overflow; /* CRT-Controller:07h */
52 unsigned char StartVertRetrace; /* CRT-Controller:10h */
53 unsigned char EndVertRetrace; /* CRT-Controller:11h */
54 unsigned char ModeControl; /* CRT-Controller:17h */
55 unsigned char ClockingMode; /* Seq-Controller:01h */
60 u8 misc, pel_msk, vss, clkdiv; member
64 /* --------------------------------------------------------------------- */
73 .height = -1,
74 .width = -1,
102 the scenes in the VGA's 32-bit latch register, and reading and writing
103 video memory just invokes latch behavior.
108 read-modify-write routine should optimize to one such bitwise
117 Bits 0-1 are write mode, bit 3 is read mode. */
141 Bits 0-2 are rotate count, bits 3-4 are logical operation
188 /* non-x86 architectures treat orig_video_isVGA as a boolean flag */ in check_mode_supported()
191 if (si->orig_video_isVGA != VIDEO_TYPE_EGAC && in check_mode_supported()
192 si->orig_video_isVGA != VIDEO_TYPE_VGAC) in check_mode_supported()
193 return -ENODEV; in check_mode_supported()
195 if (si->orig_video_mode != 0x0D && /* 320x200/4 (EGA) */ in check_mode_supported()
196 si->orig_video_mode != 0x0E && /* 640x200/4 (EGA) */ in check_mode_supported()
197 si->orig_video_mode != 0x10 && /* 640x350/4 (EGA) */ in check_mode_supported()
198 si->orig_video_mode != 0x12) /* 640x480/4 (VGA) */ in check_mode_supported()
199 return -ENODEV; in check_mode_supported()
207 struct vga16fb_par *par = info->par; in vga16fb_pan_var()
210 xoffset = var->xoffset; in vga16fb_pan_var()
211 if (info->var.bits_per_pixel == 8) { in vga16fb_pan_var()
212 pos = (info->var.xres_virtual * var->yoffset + xoffset) >> 2; in vga16fb_pan_var()
213 } else if (par->mode & MODE_TEXT) { in vga16fb_pan_var()
215 pos = (info->var.xres_virtual * (var->yoffset / fh) + xoffset) >> 3; in vga16fb_pan_var()
217 if (info->var.nonstd) in vga16fb_pan_var()
218 xoffset--; in vga16fb_pan_var()
219 pos = (info->var.xres_virtual * var->yoffset + xoffset) >> 3; in vga16fb_pan_var()
225 vga_io_r(VGA_IS1_RC); /* reset flip-flop */ in vga16fb_pan_var()
227 if (info->var.bits_per_pixel == 8) in vga16fb_pan_var()
237 if (info->var.bits_per_pixel == 4) { in vga16fb_update_fix()
238 if (info->var.nonstd) { in vga16fb_update_fix()
239 info->fix.type = FB_TYPE_PACKED_PIXELS; in vga16fb_update_fix()
240 info->fix.line_length = info->var.xres_virtual / 2; in vga16fb_update_fix()
242 info->fix.type = FB_TYPE_VGA_PLANES; in vga16fb_update_fix()
243 info->fix.type_aux = FB_AUX_VGA_PLANES_VGA4; in vga16fb_update_fix()
244 info->fix.line_length = info->var.xres_virtual / 8; in vga16fb_update_fix()
246 } else if (info->var.bits_per_pixel == 0) { in vga16fb_update_fix()
247 info->fix.type = FB_TYPE_TEXT; in vga16fb_update_fix()
248 info->fix.type_aux = FB_AUX_TEXT_CGA; in vga16fb_update_fix()
249 info->fix.line_length = info->var.xres_virtual / 4; in vga16fb_update_fix()
251 if (info->var.nonstd) { in vga16fb_update_fix()
252 info->fix.type = FB_TYPE_VGA_PLANES; in vga16fb_update_fix()
253 info->fix.type_aux = FB_AUX_VGA_PLANES_CFB8; in vga16fb_update_fix()
254 info->fix.line_length = info->var.xres_virtual / 4; in vga16fb_update_fix()
256 info->fix.type = FB_TYPE_PACKED_PIXELS; in vga16fb_update_fix()
257 info->fix.line_length = info->var.xres_virtual; in vga16fb_update_fix()
269 u8 misc; in vga16fb_clock_chip() member
281 err = *pixclock - best->pixclock; in vga16fb_clock_chip()
282 if (err < 0) err = -err; in vga16fb_clock_chip()
283 for (ptr = vgaclocks + 1; ptr->pixclock; ptr++) { in vga16fb_clock_chip()
286 tmp = *pixclock - ptr->pixclock; in vga16fb_clock_chip()
287 if (tmp < 0) tmp = -tmp; in vga16fb_clock_chip()
293 par->misc |= best->misc; in vga16fb_clock_chip()
294 par->clkdiv = best->seq_clock_mode; in vga16fb_clock_chip()
295 *pixclock = (best->pixclock * div) / mul; in vga16fb_clock_chip()
298 #define FAIL(X) return -EINVAL
302 struct vga16fb_par *par = info->par; in vga16fb_open()
304 if (!par->ref_count) { in vga16fb_open()
305 memset(&par->state, 0, sizeof(struct vgastate)); in vga16fb_open()
306 par->state.flags = VGA_SAVE_FONTS | VGA_SAVE_MODE | in vga16fb_open()
308 save_vga(&par->state); in vga16fb_open()
310 par->ref_count++; in vga16fb_open()
317 struct vga16fb_par *par = info->par; in vga16fb_release()
319 if (!par->ref_count) in vga16fb_release()
320 return -EINVAL; in vga16fb_release()
322 if (par->ref_count == 1) in vga16fb_release()
323 restore_vga(&par->state); in vga16fb_release()
324 par->ref_count--; in vga16fb_release()
332 struct vga16fb_par *par = info->par; in vga16fb_check_var()
342 par->pel_msk = 0xFF; in vga16fb_check_var()
344 if (var->bits_per_pixel == 4) { in vga16fb_check_var()
345 if (var->nonstd) { in vga16fb_check_var()
346 if (!par->isVGA) in vga16fb_check_var()
347 return -EINVAL; in vga16fb_check_var()
351 par->pel_msk = 0x0F; in vga16fb_check_var()
357 } else if (var->bits_per_pixel == 8) { in vga16fb_check_var()
358 if (!par->isVGA) in vga16fb_check_var()
359 return -EINVAL; /* no support on EGA */ in vga16fb_check_var()
361 if (var->nonstd) { in vga16fb_check_var()
369 return -EINVAL; in vga16fb_check_var()
371 xres = (var->xres + 7) & ~7; in vga16fb_check_var()
372 vxres = (var->xres_virtual + 0xF) & ~0xF; in vga16fb_check_var()
373 xoffset = (var->xoffset + 7) & ~7; in vga16fb_check_var()
374 left = (var->left_margin + 7) & ~7; in vga16fb_check_var()
375 right = (var->right_margin + 7) & ~7; in vga16fb_check_var()
376 hslen = (var->hsync_len + 7) & ~7; in vga16fb_check_var()
381 xoffset = vxres - xres; in vga16fb_check_var()
383 var->xres = xres; in vga16fb_check_var()
384 var->right_margin = right; in vga16fb_check_var()
385 var->hsync_len = hslen; in vga16fb_check_var()
386 var->left_margin = left; in vga16fb_check_var()
387 var->xres_virtual = vxres; in vga16fb_check_var()
388 var->xoffset = xoffset; in vga16fb_check_var()
402 par->crtc[VGA_CRTC_H_TOTAL] = xtotal - 5; in vga16fb_check_var()
403 par->crtc[VGA_CRTC_H_BLANK_START] = xres - 1; in vga16fb_check_var()
404 par->crtc[VGA_CRTC_H_DISP] = xres - 1; in vga16fb_check_var()
406 par->crtc[VGA_CRTC_H_SYNC_START] = pos; in vga16fb_check_var()
408 par->crtc[VGA_CRTC_H_SYNC_END] = pos & 0x1F; in vga16fb_check_var()
409 pos += left - 2; /* blank_end + 2 <= total + 5 */ in vga16fb_check_var()
410 par->crtc[VGA_CRTC_H_BLANK_END] = (pos & 0x1F) | 0x80; in vga16fb_check_var()
412 par->crtc[VGA_CRTC_H_SYNC_END] |= 0x80; in vga16fb_check_var()
414 yres = var->yres; in vga16fb_check_var()
415 lower = var->lower_margin; in vga16fb_check_var()
416 vslen = var->vsync_len; in vga16fb_check_var()
417 upper = var->upper_margin; in vga16fb_check_var()
418 vyres = var->yres_virtual; in vga16fb_check_var()
419 yoffset = var->yoffset; in vga16fb_check_var()
426 return -ENOMEM; in vga16fb_check_var()
429 yoffset = vyres - yres; in vga16fb_check_var()
430 var->yres = yres; in vga16fb_check_var()
431 var->lower_margin = lower; in vga16fb_check_var()
432 var->vsync_len = vslen; in vga16fb_check_var()
433 var->upper_margin = upper; in vga16fb_check_var()
434 var->yres_virtual = vyres; in vga16fb_check_var()
435 var->yoffset = yoffset; in vga16fb_check_var()
437 if (var->vmode & FB_VMODE_DOUBLE) { in vga16fb_check_var()
457 par->crtc[VGA_CRTC_V_TOTAL] = ytotal - 2; in vga16fb_check_var()
461 par->crtc[VGA_CRTC_PRESET_ROW] = 0; in vga16fb_check_var()
462 par->crtc[VGA_CRTC_MAX_SCAN] = 0x40; /* 1 scanline, no linecmp */ in vga16fb_check_var()
463 if (var->vmode & FB_VMODE_DOUBLE) in vga16fb_check_var()
464 par->crtc[VGA_CRTC_MAX_SCAN] |= 0x80; in vga16fb_check_var()
465 par->crtc[VGA_CRTC_CURSOR_START] = 0x20; in vga16fb_check_var()
466 par->crtc[VGA_CRTC_CURSOR_END] = 0x00; in vga16fb_check_var()
468 xoffset--; in vga16fb_check_var()
470 par->crtc[VGA_CRTC_START_HI] = pos >> 8; in vga16fb_check_var()
471 par->crtc[VGA_CRTC_START_LO] = pos & 0xFF; in vga16fb_check_var()
472 par->crtc[VGA_CRTC_CURSOR_HI] = 0x00; in vga16fb_check_var()
473 par->crtc[VGA_CRTC_CURSOR_LO] = 0x00; in vga16fb_check_var()
474 pos = yres - 1; in vga16fb_check_var()
475 par->crtc[VGA_CRTC_V_DISP_END] = pos & 0xFF; in vga16fb_check_var()
476 par->crtc[VGA_CRTC_V_BLANK_START] = pos & 0xFF; in vga16fb_check_var()
478 r7 |= 0x0A; /* 0x02 -> DISP_END, 0x08 -> BLANK_START */ in vga16fb_check_var()
480 r7 |= 0x40; /* 0x40 -> DISP_END */ in vga16fb_check_var()
481 par->crtc[VGA_CRTC_MAX_SCAN] |= 0x20; /* BLANK_START */ in vga16fb_check_var()
484 par->crtc[VGA_CRTC_V_SYNC_START] = pos & 0xFF; in vga16fb_check_var()
490 par->crtc[VGA_CRTC_V_SYNC_END] = (pos & 0x0F) & ~0x10; /* disabled IRQ */ in vga16fb_check_var()
491 pos += upper - 1; /* blank_end + 1 <= ytotal + 2 */ in vga16fb_check_var()
492 par->crtc[VGA_CRTC_V_BLANK_END] = pos & 0xFF; /* 0x7F for original VGA, in vga16fb_check_var()
496 par->crtc[VGA_CRTC_OFFSET] = vxres >> 1; in vga16fb_check_var()
498 par->crtc[VGA_CRTC_UNDERLINE] = 0x5F; /* 256, cfb8 */ in vga16fb_check_var()
500 par->crtc[VGA_CRTC_UNDERLINE] = 0x1F; /* 16, vgap */ in vga16fb_check_var()
501 par->crtc[VGA_CRTC_MODE] = rMode | ((mode & MODE_TEXT) ? 0xA3 : 0xE3); in vga16fb_check_var()
502 par->crtc[VGA_CRTC_LINE_COMPARE] = 0xFF; in vga16fb_check_var()
503 par->crtc[VGA_CRTC_OVERFLOW] = r7; in vga16fb_check_var()
505 par->vss = 0x00; /* 3DA */ in vga16fb_check_var()
507 par->misc = 0xE3; /* enable CPU, ports 0x3Dx, positive sync */ in vga16fb_check_var()
508 if (var->sync & FB_SYNC_HOR_HIGH_ACT) in vga16fb_check_var()
509 par->misc &= ~0x40; in vga16fb_check_var()
510 if (var->sync & FB_SYNC_VERT_HIGH_ACT) in vga16fb_check_var()
511 par->misc &= ~0x80; in vga16fb_check_var()
513 par->mode = mode; in vga16fb_check_var()
517 vga16fb_clock_chip(par, &var->pixclock, info, 1, 2); in vga16fb_check_var()
520 vga16fb_clock_chip(par, &var->pixclock, info, 1, 1); in vga16fb_check_var()
522 var->red.offset = var->green.offset = var->blue.offset = in vga16fb_check_var()
523 var->transp.offset = 0; in vga16fb_check_var()
524 var->red.length = var->green.length = var->blue.length = in vga16fb_check_var()
525 (par->isVGA) ? 6 : 2; in vga16fb_check_var()
526 var->transp.length = 0; in vga16fb_check_var()
527 var->activate = FB_ACTIVATE_NOW; in vga16fb_check_var()
528 var->height = -1; in vga16fb_check_var()
529 var->width = -1; in vga16fb_check_var()
530 var->accel_flags = 0; in vga16fb_check_var()
537 struct vga16fb_par *par = info->par; in vga16fb_set_par()
543 seq[VGA_SEQ_CLOCK_MODE] = 0x01 | par->clkdiv; in vga16fb_set_par()
544 if (par->mode & MODE_TEXT) in vga16fb_set_par()
549 if (par->mode & MODE_TEXT) in vga16fb_set_par()
551 else if (par->mode & MODE_SKIP4) in vga16fb_set_par()
561 if (par->mode & MODE_TEXT) { in vga16fb_set_par()
565 if (par->mode & MODE_CFB) in vga16fb_set_par()
576 if (par->mode & MODE_TEXT) in vga16fb_set_par()
578 else if (par->mode & MODE_8BPP) in vga16fb_set_par()
584 if (par->mode & MODE_8BPP) in vga16fb_set_par()
585 atc[VGA_ATC_PEL] = (info->var.xoffset & 3) << 1; in vga16fb_set_par()
587 atc[VGA_ATC_PEL] = info->var.xoffset & 7; in vga16fb_set_par()
590 if (par->mode & MODE_TEXT) { in vga16fb_set_par()
592 par->crtc[VGA_CRTC_MAX_SCAN] = (par->crtc[VGA_CRTC_MAX_SCAN] in vga16fb_set_par()
593 & ~0x1F) | (fh - 1); in vga16fb_set_par()
599 if (!par->isVGA) { in vga16fb_set_par()
604 /* update misc output register */ in vga16fb_set_par()
605 vga_io_w(VGA_MIS_W, par->misc); in vga16fb_set_par()
610 if (par->isVGA) in vga16fb_set_par()
611 vga_io_w(VGA_PEL_MSK, par->pel_msk); in vga16fb_set_par()
622 /* deprotect CRT registers 0-7 */ in vga16fb_set_par()
623 vga_io_wcrt(VGA_CRTC_V_SYNC_END, par->crtc[VGA_CRTC_V_SYNC_END]); in vga16fb_set_par()
627 vga_io_wcrt(i, par->crtc[i]); in vga16fb_set_par()
637 vga_io_r(VGA_IS1_RC); /* reset flip-flop */ in vga16fb_set_par()
679 struct vga16fb_par *par = info->par; in vga16fb_setcolreg()
692 gray = info->var.grayscale; in vga16fb_setcolreg()
698 if (par->isVGA) in vga16fb_setcolreg()
723 if(!par->vesa_blanked) { in vga_vesa_blank()
724 par->vga_state.CrtMiscIO = vga_io_r(VGA_MIS_R); in vga_vesa_blank()
727 par->vga_state.HorizontalTotal = vga_io_rcrt(0x00); /* HorizontalTotal */ in vga_vesa_blank()
728 par->vga_state.HorizDisplayEnd = vga_io_rcrt(0x01); /* HorizDisplayEnd */ in vga_vesa_blank()
729 par->vga_state.StartHorizRetrace = vga_io_rcrt(0x04); /* StartHorizRetrace */ in vga_vesa_blank()
730 par->vga_state.EndHorizRetrace = vga_io_rcrt(0x05); /* EndHorizRetrace */ in vga_vesa_blank()
731 par->vga_state.Overflow = vga_io_rcrt(0x07); /* Overflow */ in vga_vesa_blank()
732 par->vga_state.StartVertRetrace = vga_io_rcrt(0x10); /* StartVertRetrace */ in vga_vesa_blank()
733 par->vga_state.EndVertRetrace = vga_io_rcrt(0x11); /* EndVertRetrace */ in vga_vesa_blank()
734 par->vga_state.ModeControl = vga_io_rcrt(0x17); /* ModeControl */ in vga_vesa_blank()
735 par->vga_state.ClockingMode = vga_io_rseq(0x01); /* ClockingMode */ in vga_vesa_blank()
740 vga_io_wseq(0x01, par->vga_state.ClockingMode | 0x20); in vga_vesa_blank()
743 if ((par->vga_state.CrtMiscIO & 0x80) == 0x80) in vga_vesa_blank()
744 vga_io_w(VGA_MIS_W, par->vga_state.CrtMiscIO & 0xef); in vga_vesa_blank()
755 vga_io_wcrt(VGA_CRTC_OVERFLOW, par->vga_state.Overflow | 0x84); in vga_vesa_blank()
779 vga_io_w(VGA_MIS_W, par->vga_state.CrtMiscIO); in vga_vesa_unblank()
782 vga_io_wcrt(0x00, par->vga_state.HorizontalTotal); in vga_vesa_unblank()
784 vga_io_wcrt(0x01, par->vga_state.HorizDisplayEnd); in vga_vesa_unblank()
786 vga_io_wcrt(0x04, par->vga_state.StartHorizRetrace); in vga_vesa_unblank()
788 vga_io_wcrt(0x05, par->vga_state.EndHorizRetrace); in vga_vesa_unblank()
790 vga_io_wcrt(0x07, par->vga_state.Overflow); in vga_vesa_unblank()
792 vga_io_wcrt(0x10, par->vga_state.StartVertRetrace); in vga_vesa_unblank()
794 vga_io_wcrt(0x11, par->vga_state.EndVertRetrace); in vga_vesa_unblank()
796 vga_io_wcrt(0x17, par->vga_state.ModeControl); in vga_vesa_unblank()
798 vga_io_wseq(0x01, par->vga_state.ClockingMode); in vga_vesa_unblank()
820 struct vga16fb_par *par = info->par; in vga16fb_blank()
824 if (par->vesa_blanked) { in vga16fb_blank()
826 par->vesa_blanked = 0; in vga16fb_blank()
828 if (par->palette_blanked) { in vga16fb_blank()
829 par->palette_blanked = 0; in vga16fb_blank()
834 par->palette_blanked = 1; in vga16fb_blank()
838 par->vesa_blanked = 1; in vga16fb_blank()
846 u32 dx = rect->dx, width = rect->width; in vga_8planes_fillrect()
855 where = info->screen_base + dx + rect->dy * info->fix.line_length; in vga_8planes_fillrect()
857 if (rect->rop == ROP_COPY) { in vga_8planes_fillrect()
862 line_ofs = info->fix.line_length - width; in vga_8planes_fillrect()
865 height = rect->height; in vga_8planes_fillrect()
867 while (height--) { in vga_8planes_fillrect()
871 for (x = width; x > 0; --x) { in vga_8planes_fillrect()
872 writeb(rect->color, where); in vga_8planes_fillrect()
884 for (y = 0; y < rect->height; y++) { in vga_8planes_fillrect()
887 where += info->fix.line_length; in vga_8planes_fillrect()
903 vxres = info->var.xres_virtual; in vga16fb_fillrect()
904 vyres = info->var.yres_virtual; in vga16fb_fillrect()
906 if (!rect->width || !rect->height || rect->dx > vxres || rect->dy > vyres) in vga16fb_fillrect()
912 x2 = rect->dx + rect->width; in vga16fb_fillrect()
913 y2 = rect->dy + rect->height; in vga16fb_fillrect()
916 width = x2 - rect->dx; in vga16fb_fillrect()
918 switch (info->fix.type) { in vga16fb_fillrect()
920 if (info->fix.type_aux == FB_AUX_VGA_PLANES_VGA4) { in vga16fb_fillrect()
922 height = y2 - rect->dy; in vga16fb_fillrect()
923 width = rect->width/8; in vga16fb_fillrect()
925 line_ofs = info->fix.line_length - width; in vga16fb_fillrect()
926 dst = info->screen_base + (rect->dx/8) + rect->dy * info->fix.line_length; in vga16fb_fillrect()
928 switch (rect->rop) { in vga16fb_fillrect()
933 setcolor(rect->color); in vga16fb_fillrect()
938 while (height--) { in vga16fb_fillrect()
954 while (height--) { in vga16fb_fillrect()
984 height = area->height; in vga_8planes_copyarea()
986 sx = area->sx / 4; in vga_8planes_copyarea()
987 dx = area->dx / 4; in vga_8planes_copyarea()
988 width = area->width / 4; in vga_8planes_copyarea()
990 if (area->dy < area->sy || (area->dy == area->sy && dx < sx)) { in vga_8planes_copyarea()
991 line_ofs = info->fix.line_length - width; in vga_8planes_copyarea()
992 dest = info->screen_base + dx + area->dy * info->fix.line_length; in vga_8planes_copyarea()
993 src = info->screen_base + sx + area->sy * info->fix.line_length; in vga_8planes_copyarea()
994 while (height--) { in vga_8planes_copyarea()
1005 line_ofs = info->fix.line_length - width; in vga_8planes_copyarea()
1006 dest = info->screen_base + dx + width + in vga_8planes_copyarea()
1007 (area->dy + height - 1) * info->fix.line_length; in vga_8planes_copyarea()
1008 src = info->screen_base + sx + width + in vga_8planes_copyarea()
1009 (area->sy + height - 1) * info->fix.line_length; in vga_8planes_copyarea()
1010 while (height--) { in vga_8planes_copyarea()
1012 --src; in vga_8planes_copyarea()
1013 --dest; in vga_8planes_copyarea()
1017 src -= line_ofs; in vga_8planes_copyarea()
1018 dest -= line_ofs; in vga_8planes_copyarea()
1030 u32 dx = area->dx, dy = area->dy, sx = area->sx, sy = area->sy; in vga16fb_copyarea()
1036 vxres = info->var.xres_virtual; in vga16fb_copyarea()
1037 vyres = info->var.yres_virtual; in vga16fb_copyarea()
1039 if (area->dx > vxres || area->sx > vxres || area->dy > vyres || in vga16fb_copyarea()
1040 area->sy > vyres) in vga16fb_copyarea()
1044 old_dx = area->dx; in vga16fb_copyarea()
1045 old_dy = area->dy; in vga16fb_copyarea()
1051 x2 = area->dx + area->width; in vga16fb_copyarea()
1052 y2 = area->dy + area->height; in vga16fb_copyarea()
1053 dx = area->dx > 0 ? area->dx : 0; in vga16fb_copyarea()
1054 dy = area->dy > 0 ? area->dy : 0; in vga16fb_copyarea()
1057 width = x2 - dx; in vga16fb_copyarea()
1058 height = y2 - dy; in vga16fb_copyarea()
1064 sx += (dx - old_dx); in vga16fb_copyarea()
1065 sy += (dy - old_dy); in vga16fb_copyarea()
1071 switch (info->fix.type) { in vga16fb_copyarea()
1073 if (info->fix.type_aux == FB_AUX_VGA_PLANES_VGA4) { in vga16fb_copyarea()
1075 line_ofs = info->fix.line_length - width; in vga16fb_copyarea()
1082 dst = info->screen_base + (dx/8) + dy * info->fix.line_length; in vga16fb_copyarea()
1083 src = info->screen_base + (sx/8) + sy * info->fix.line_length; in vga16fb_copyarea()
1084 while (height--) { in vga16fb_copyarea()
1095 dst = info->screen_base + (dx/8) + width + in vga16fb_copyarea()
1096 (dy + height - 1) * info->fix.line_length; in vga16fb_copyarea()
1097 src = info->screen_base + (sx/8) + width + in vga16fb_copyarea()
1098 (sy + height - 1) * info->fix.line_length; in vga16fb_copyarea()
1099 while (height--) { in vga16fb_copyarea()
1101 dst--; in vga16fb_copyarea()
1102 src--; in vga16fb_copyarea()
1106 src -= line_ofs; in vga16fb_copyarea()
1107 dst -= line_ofs; in vga16fb_copyarea()
1131 #error "Only __BIG_ENDIAN and __LITTLE_ENDIAN are supported in vga-planes"
1141 const unsigned char *cdat = image->data; in vga_8planes_imageblit()
1142 u32 dx = image->dx; in vga_8planes_imageblit()
1147 where = info->screen_base + dx + image->dy * info->fix.line_length; in vga_8planes_imageblit()
1150 writeb(image->bg_color, where); in vga_8planes_imageblit()
1153 setmask(image->fg_color ^ image->bg_color); in vga_8planes_imageblit()
1156 for (y = 0; y < image->height; y++, where += info->fix.line_length) in vga_8planes_imageblit()
1167 char __iomem *where = info->screen_base + (image->dx/8) + in vga_imageblit_expand()
1168 image->dy * info->fix.line_length; in vga_imageblit_expand()
1169 struct vga16fb_par *par = info->par; in vga_imageblit_expand()
1170 char *cdat = (char *) image->data; in vga_imageblit_expand()
1174 switch (info->fix.type) { in vga_imageblit_expand()
1176 if (info->fix.type_aux == FB_AUX_VGA_PLANES_VGA4) { in vga_imageblit_expand()
1177 if (par->isVGA) { in vga_imageblit_expand()
1181 setcolor(image->fg_color); in vga_imageblit_expand()
1185 writeb(image->bg_color, where); in vga_imageblit_expand()
1190 for (y = 0; y < image->height; y++) { in vga_imageblit_expand()
1192 for (x = image->width/8; x--;) in vga_imageblit_expand()
1194 where += info->fix.line_length; in vga_imageblit_expand()
1201 setcolor(image->bg_color); in vga_imageblit_expand()
1205 for (y = 0; y < image->height; y++) { in vga_imageblit_expand()
1207 for (x=image->width/8; x--;){ in vga_imageblit_expand()
1209 setcolor(image->fg_color); in vga_imageblit_expand()
1216 where += info->fix.line_length; in vga_imageblit_expand()
1234 struct vga16fb_par *par = info->par; in vga_imageblit_color()
1236 info->screen_base + image->dy * info->fix.line_length + in vga_imageblit_color()
1237 image->dx/8; in vga_imageblit_color()
1238 const char *cdat = image->data; in vga_imageblit_color()
1242 switch (info->fix.type) { in vga_imageblit_color()
1244 if (info->fix.type_aux == FB_AUX_VGA_PLANES_VGA4 && in vga_imageblit_color()
1245 par->isVGA) { in vga_imageblit_color()
1250 for (y = 0; y < image->height; y++) { in vga_imageblit_color()
1251 for (x = 0; x < image->width; x++) { in vga_imageblit_color()
1256 setmask(1 << (7 - (x % 8))); in vga_imageblit_color()
1262 where += info->fix.line_length; in vga_imageblit_color()
1276 if (image->depth == 1) in vga16fb_imageblit()
1284 iounmap(info->screen_base); in vga16fb_destroy()
1285 fb_dealloc_cmap(&info->cmap); in vga16fb_destroy()
1313 si = dev_get_platdata(&dev->dev); in vga16fb_probe()
1315 return -ENODEV; in vga16fb_probe()
1322 info = framebuffer_alloc(sizeof(struct vga16fb_par), &dev->dev); in vga16fb_probe()
1325 ret = -ENOMEM; in vga16fb_probe()
1330 info->screen_base = (void __iomem *)VGA_MAP_MEM(VGA_FB_PHYS_BASE, 0); in vga16fb_probe()
1332 if (!info->screen_base) { in vga16fb_probe()
1334 ret = -ENOMEM; in vga16fb_probe()
1338 printk(KERN_INFO "vga16fb: mapped to 0x%p\n", info->screen_base); in vga16fb_probe()
1339 par = info->par; in vga16fb_probe()
1342 par->isVGA = si->orig_video_isVGA == VIDEO_TYPE_VGAC; in vga16fb_probe()
1344 /* non-x86 architectures treat orig_video_isVGA as a boolean flag */ in vga16fb_probe()
1345 par->isVGA = si->orig_video_isVGA; in vga16fb_probe()
1347 par->palette_blanked = 0; in vga16fb_probe()
1348 par->vesa_blanked = 0; in vga16fb_probe()
1350 i = par->isVGA? 6 : 2; in vga16fb_probe()
1357 info->fbops = &vga16fb_ops; in vga16fb_probe()
1358 info->var = vga16fb_defined; in vga16fb_probe()
1359 info->fix = vga16fb_fix; in vga16fb_probe()
1361 info->pixmap.blit_x = 1 << 7 | 1 << 15 | 1 << 23 | 1 << 31; in vga16fb_probe()
1362 info->flags = FBINFO_HWACCEL_YPAN; in vga16fb_probe()
1364 i = (info->var.bits_per_pixel == 8) ? 256 : 16; in vga16fb_probe()
1365 ret = fb_alloc_cmap(&info->cmap, i, 0); in vga16fb_probe()
1368 ret = -ENOMEM; in vga16fb_probe()
1372 if (vga16fb_check_var(&info->var, info)) { in vga16fb_probe()
1374 ret = -EINVAL; in vga16fb_probe()
1385 ret = -EINVAL; in vga16fb_probe()
1389 fb_info(info, "%s frame buffer device\n", info->fix.id); in vga16fb_probe()
1395 fb_dealloc_cmap(&info->cmap); in vga16fb_probe()
1397 iounmap(info->screen_base); in vga16fb_probe()
1413 {"ega-framebuffer", 0},
1414 {"vga-framebuffer", 0},