Lines Matching refs:ss
430 struct gpx_screen *ss = sc->sc_scr;
442 wdf->height = ss->ss_ri.ri_height;
443 wdf->width = ss->ss_ri.ri_width;
444 wdf->depth = ss->ss_depth;
445 wdf->cmsize = 1 << ss->ss_depth;
450 error = gpx_getcmap(ss, cm);
456 error = gpx_putcmap(ss, cm);
459 gpx_loadcmap(ss, cm->index, cm->count);
487 struct gpx_screen *ss = sc->sc_scr;
488 struct rasops_info *ri = &ss->ss_ri;
525 struct gpx_screen *ss = ri->ri_hw;
536 sx = (uc % ss->ss_gpr) * font->stride * NBBY;
537 sy = GPX_HEIGHT - (1 + uc / ss->ss_gpr) * font->fontheight;
540 while (gpx_viper_write(ss, CS_UPDATE_MASK, 0x00ff))
542 gpx_viper_write(ss, SRC1_OCR_B,
544 gpx_viper_write(ss, DST_OCR_B,
546 gpx_viper_write(ss, MASK_1, 0xffff);
547 gpx_viper_write(ss, VIPER_Z_LOAD | FOREGROUND_COLOR_Z, fg);
548 gpx_viper_write(ss, VIPER_Z_LOAD | BACKGROUND_COLOR_Z, bg);
549 ss->ss_adder->x_clip_min = 0;
550 ss->ss_adder->x_clip_max = GPX_WIDTH;
551 ss->ss_adder->y_clip_min = 0;
552 ss->ss_adder->y_clip_max = GPX_VISHEIGHT;
554 ss->ss_adder->fast_dest_dy = 0;
555 ss->ss_adder->slow_dest_dx = 0;
556 ss->ss_adder->error_1 = 0;
557 ss->ss_adder->error_2 = 0;
558 ss->ss_adder->rasterop_mode = DST_WRITE_ENABLE | NORMAL;
559 gpx_wait(ss, RASTEROP_COMPLETE);
560 ss->ss_adder->destination_x = dx;
561 ss->ss_adder->fast_dest_dx = font->fontwidth;
562 ss->ss_adder->destination_y = dy;
563 ss->ss_adder->slow_dest_dy = font->fontheight;
565 ss->ss_adder->source_1_x = sx;
566 ss
567 ss->ss_adder->source_1_dx = font->fontwidth;
568 ss->ss_adder->source_1_dy = font->fontheight;
569 ss->ss_adder->cmd = RASTEROP | OCRB | S1E | DTE | LF_R1;
572 gpx_fillrect(ss, dx, dy + font->fontheight - 2, font->fontwidth,
581 struct gpx_screen *ss = ri->ri_hw;
591 gpx_copyrect(ss, sx, y, dx, y, w, h);
598 struct gpx_screen *ss = ri->ri_hw;
607 gpx_fillrect(ss, x, y, dx, dy, attr, LF_R2); /* bg fill */
614 struct gpx_screen *ss = ri->ri_hw;
624 gpx_copyrect(ss, x, sy, x, dy, w, h);
631 struct gpx_screen *ss = ri->ri_hw;
640 gpx_fillrect(ss, x, y, dx, dy, attr, LF_R2); /* bg fill */
646 struct gpx_screen *ss = ri->ri_hw;
654 gpx_fillrect(ss, x, y, w, h, WSCOL_WHITE << 24, LF_R4); /* invert */
662 gpx_wait(struct gpx_screen *ss, int bits)
666 ss->ss_adder->status = 0;
668 if ((ss->ss_adder->status & bits) == bits)
677 gpx_viper_write(struct gpx_screen *ss, u_int reg, uint16_t val)
679 if (gpx_wait(ss, ADDRESS_COMPLETE) == 0 &&
680 gpx_wait(ss, TX_READY) == 0) {
681 ss->ss_adder->id_data = val;
682 ss->ss_adder->command = ID_LOAD | reg;
686 if (ss->ss_console == 0) /* don't make things worse! */
694 gpx_reset_viper(struct gpx_screen *ss)
698 ss->ss_adder->interrupt_enable = 0;
699 ss->ss_adder->command = CANCEL;
701 ss->ss_adder->x_scan_count_0 = 0x2800;
702 ss->ss_adder->x_scan_count_1 = 0x1020;
703 ss->ss_adder->x_scan_count_2 = 0x003a;
704 ss->ss_adder->x_scan_count_3 = 0x38f0;
705 ss->ss_adder->x_scan_count_4 = 0x6128;
706 ss->ss_adder->x_scan_count_5 = 0x093a;
707 ss->ss_adder->x_scan_count_6 = 0x313c;
708 ss->ss_adder->sync_phase_adj = 0x0100;
709 ss->ss_adder->x_scan_conf = 0x00c8;
717 ss->ss_adder->y_scan_count_0 = 0x135f;
718 ss->ss_adder->y_scan_count_1 = 0x3363;
719 ss->ss_adder->y_scan_count_2 = 0x2366;
720 ss->ss_adder->y_scan_count_3 = 0x0388;
724 if (gpx_wait(ss, FRAME_SYNC) != 0) {
731 ss->ss_adder->y_scan_count_0 = 0x01;
732 ss->ss_adder->y_scan_count_1 = 0x01;
733 ss->ss_adder->y_scan_count_2 = 0x01;
734 ss->ss_adder->y_scan_count_3 = 0x01;
736 gpx_wait(ss, FRAME_SYNC);
737 gpx_wait(ss, FRAME_SYNC);
742 ss->ss_adder->y_scan_count_3 = 0x0388;
743 ss->ss_adder->y_scan_count_2 = 0x2366;
744 ss->ss_adder->y_scan_count_1 = 0x3363;
745 ss->ss_adder->y_scan_count_0 = 0x135f;
748 ss->ss_adder->x_index_pending = 0;
749 ss->ss_adder->y_index_pending = 0;
750 ss->ss_adder->x_index_new = 0;
751 ss->ss_adder->y_index_new = 0;
752 ss->ss_adder->x_index_old = 0;
753 ss->ss_adder->y_index_old = 0;
754 ss->ss_adder->pause = 0;
756 ss->ss_adder->rasterop_mode =
759 ss->ss_adder->source_1_dx = 1;
760 ss->ss_adder->source_1_dy = 1;
761 ss->ss_adder->source_1_x = 0;
762 ss->ss_adder->source_1_y = 0;
763 ss->ss_adder->destination_x = 0;
764 ss->ss_adder->destination_y = 0;
765 ss->ss_adder->fast_dest_dx = 1;
766 ss->ss_adder->fast_dest_dy = 0;
767 ss->ss_adder->slow_dest_dx = 0;
768 ss->ss_adder->slow_dest_dy = 1;
769 ss->ss_adder->error_1 = 0;
770 ss->ss_adder->error_2 = 0;
772 ss->ss_adder->fast_scale = UNITY;
773 ss->ss_adder->slow_scale = UNITY;
775 ss->ss_adder->source_2_x = 0;
776 ss->ss_adder->source_2_y = 0;
777 ss->ss_adder->source_2_size = 0x0022;
780 gpx_viper_write(ss, CS_UPDATE_MASK, 1 << i);
781 gpx_viper_write(ss, PLANE_ADDRESS, i);
784 gpx_viper_write(ss, CS_UPDATE_MASK, 0x00ff);
785 gpx_viper_write(ss, CS_SCROLL_MASK, 0x00ff);
787 gpx_viper_write(ss, MEMORY_BUS_WIDTH, 0x000c); /* bus width = 16 */
788 gpx_viper_write(ss, RESOLUTION_MODE, 0x0000); /* one bit/pixel */
790 gpx_viper_write(ss, SCROLL_CONSTANT,
792 gpx_viper_write(ss, SCROLL_FILL, 0x0000);
794 gpx_wait(ss, ADDRESS_COMPLETE);
795 ss->ss_adder->x_clip_min = 0;
796 ss->ss_adder->x_clip_max = GPX_WIDTH;
797 ss->ss_adder->y_clip_min = 0;
798 ss->ss_adder->y_clip_max = GPX_HEIGHT;
799 ss->ss_adder->scroll_x_min = 0;
800 ss->ss_adder->scroll_x_max = GPX_WIDTH;
801 ss->ss_adder->scroll_y_min = 0;
802 ss->ss_adder->scroll_y_max = GPX_HEIGHT;
803 gpx_wait(ss, FRAME_SYNC); /* wait at LEAST 1 full frame */
804 gpx_wait(ss, FRAME_SYNC);
805 ss->ss_adder->x_index_pending = 0;
806 ss->ss_adder->y_index_pending = 0;
807 ss->ss_adder->x_index_new = 0;
808 ss->ss_adder->y_index_new = 0;
809 ss->ss_adder->x_index_old = 0;
810 ss->ss_adder->y_index_old = 0;
811 gpx_wait(ss, ADDRESS_COMPLETE);
812 gpx_viper_write(ss, LEFT_SCROLL_MASK, 0x0000);
813 gpx_viper_write(ss, RIGHT_SCROLL_MASK, 0x0000);
815 gpx_viper_write(ss, SOURCE, 0xffff);
816 gpx_viper_write(ss, MASK_1, 0xffff);
817 gpx_viper_write(ss, VIPER_Z_LOAD | FOREGROUND_COLOR_Z, 255);
818 gpx_viper_write(ss, VIPER_Z_LOAD | BACKGROUND_COLOR_Z, 0);
820 gpx_viper_write(ss, SRC1_OCR_A,
822 gpx_viper_write(ss, SRC2_OCR_A,
824 gpx_viper_write(ss, DST_OCR_A,
826 gpx_viper_write(ss, SRC1_OCR_B,
828 gpx_viper_write(ss, SRC2_OCR_B,
830 gpx_viper_write(ss, DST_OCR_B,
837 gpx_viper_write(ss, LU_FUNCTION_R1, FULL_SRC_RESOLUTION | LF_SOURCE);
839 gpx_viper_write(ss, LU_FUNCTION_R2, FULL_SRC_RESOLUTION | LF_ZEROS);
841 gpx_viper_write(ss, LU_FUNCTION_R3, FULL_SRC_RESOLUTION | LF_ONES);
843 gpx_viper_write(ss, LU_FUNCTION_R4, FULL_SRC_RESOLUTION | LF_NOT_D);
848 gpx_clear_screen(struct gpx_screen *ss)
851 ss->ss_adder->x_limit = GPX_WIDTH;
852 ss->ss_adder->y_limit = GPX_HEIGHT;
853 ss->ss_adder->y_offset_pending = 0;
854 gpx_wait(ss, FRAME_SYNC); /* wait at LEAST 1 full frame */
855 gpx_wait(ss, FRAME_SYNC);
856 ss->ss_adder->y_scroll_constant = SCROLL_ERASE;
857 gpx_wait(ss, FRAME_SYNC);
858 gpx_wait(ss, FRAME_SYNC);
859 ss->ss_adder->y_offset_pending = GPX_VISHEIGHT;
860 gpx_wait(ss, FRAME_SYNC);
861 gpx_wait(ss, FRAME_SYNC);
862 ss->ss_adder->y_scroll_constant = SCROLL_ERASE;
863 gpx_wait(ss, FRAME_SYNC);
864 gpx_wait(ss, FRAME_SYNC);
865 ss->ss_adder->y_offset_pending = 2 * GPX_VISHEIGHT;
866 gpx_wait(ss, FRAME_SYNC);
867 gpx_wait(ss, FRAME_SYNC);
868 ss->ss_adder->y_scroll_constant = SCROLL_ERASE;
869 gpx_wait(ss, FRAME_SYNC);
870 gpx_wait(ss, FRAME_SYNC);
871 ss->ss_adder->y_offset_pending = 0; /* back to normal */
872 gpx_wait(ss, FRAME_SYNC);
873 gpx_wait(ss, FRAME_SYNC);
874 ss->ss_adder->x_limit = GPX_WIDTH;
875 ss->ss_adder->y_limit = GPX_VISHEIGHT;
879 gpx_setup_screen(struct gpx_screen *ss)
881 struct rasops_info *ri = &ss->ss_ri;
890 ri->ri_hw = ss;
891 if (ss == &gpx_consscr)
940 if (ss->ss_depth == 8) {
941 struct ramdac8 *rd = ss->ss_vdac;
945 struct ramdac4 *rd = ss->ss_vdac;
952 gpx_reset_viper(ss);
957 gpx_resetcmap(ss);
962 gpx_clear_screen(ss);
967 gpx_upload_font(ss);
970 ss->ss_cursor->cmdr = ss->ss_curcmd = PCCCMD_HSHI;
983 gpx_upload_font(struct gpx_screen *ss)
985 struct rasops_info *ri = &ss->ss_ri;
994 gpx_viper_write(ss, MASK_1, 0xffff);
995 gpx_viper_write(ss, VIPER_Z_LOAD | FOREGROUND_COLOR_Z, 255);
996 gpx_viper_write(ss, VIPER_Z_LOAD | BACKGROUND_COLOR_Z, 0);
998 gpx_viper_write(ss, SRC1_OCR_B,
1000 gpx_viper_write(ss, SRC2_OCR_B,
1002 gpx_viper_write(ss, DST_OCR_B,
1005 ss->ss_adder->rasterop_mode =
1007 gpx_wait(ss, RASTEROP_COMPLETE);
1013 ss->ss_gpr = MIN(GPX_WIDTH / (NBBY * font->stride), font->numchars);
1014 if ((ss->ss_gpr & 1) != 0)
1015 ss->ss_gpr--;
1019 nchars = MIN(ss->ss_gpr, remaining);
1021 ss->ss_adder->destination_x = 0;
1022 ss->ss_adder->destination_y =
1024 ss->ss_adder->fast_dest_dx = nchars * 16;
1025 ss->ss_adder->slow_dest_dy = font->fontheight;
1028 gpx_viper_write(ss, CS_UPDATE_MASK, 0x00ff);
1029 ss->ss_adder->cmd = PBT | OCRB | DTE | LF_R1 | 2; /*XXX why 2?*/
1057 gpx_wait(ss, TX_READY);
1058 ss->ss_adder->id_data = data;
1066 gpx_copyrect(struct gpx_screen *ss,
1070 while (gpx_viper_write(ss, CS_UPDATE_MASK, 0x00ff))
1072 gpx_viper_write(ss, MASK_1, 0xffff);
1073 gpx_viper_write(ss, VIPER_Z_LOAD | FOREGROUND_COLOR_Z, 255);
1074 gpx_viper_write(ss, VIPER_Z_LOAD | BACKGROUND_COLOR_Z, 0);
1075 gpx_viper_write(ss, SRC1_OCR_B,
1077 gpx_viper_write(ss, DST_OCR_B,
1079 ss->ss_adder->fast_dest_dy = 0;
1080 ss->ss_adder->slow_dest_dx = 0;
1081 ss->ss_adder->error_1 = 0;
1082 ss->ss_adder->error_2 = 0;
1083 ss->ss_adder->rasterop_mode = DST_WRITE_ENABLE | NORMAL;
1084 gpx_wait(ss, RASTEROP_COMPLETE);
1085 ss->ss_adder->destination_x = dx;
1086 ss->ss_adder->fast_dest_dx = w;
1087 ss->ss_adder->destination_y = dy;
1088 ss->ss_adder->slow_dest_dy = h;
1089 ss->ss_adder->source_1_x = sx;
1090 ss->ss_adder->source_1_dx = w;
1091 ss->ss_adder->source_1_y = sy;
1092 ss->ss_adder->source_1_dy = h;
1093 ss->ss_adder->cmd = RASTEROP | OCRB | S1E | DTE | LF_R1;
1100 gpx_fillrect(struct gpx_screen *ss, int x, int y, int dx, int dy, long attr,
1107 while (gpx_viper_write(ss, CS_UPDATE_MASK, 0x00ff))
1109 gpx_viper_write(ss, MASK_1, 0xffff);
1110 gpx_viper_write(ss, SOURCE, 0xffff);
1111 gpx_viper_write(ss, VIPER_Z_LOAD | FOREGROUND_COLOR_Z, fg);
1112 gpx_viper_write(ss, VIPER_Z_LOAD | BACKGROUND_COLOR_Z, bg);
1113 gpx_viper_write(ss, SRC1_OCR_B,
1115 gpx_viper_write(ss, DST_OCR_B,
1117 ss->ss_adder->fast_dest_dx = 0;
1118 ss->ss_adder->fast_dest_dy = 0;
1119 ss->ss_adder->slow_dest_dx = 0;
1120 ss->ss_adder->error_1 = 0;
1121 ss->ss_adder->error_2 = 0;
1122 ss
1123 gpx_wait(ss, RASTEROP_COMPLETE);
1124 ss->ss_adder->destination_x = x;
1125 ss->ss_adder->fast_dest_dx = dx;
1126 ss->ss_adder->destination_y = y;
1127 ss->ss_adder->slow_dest_dy = dy;
1128 ss->ss_adder->source_1_x = x;
1129 ss->ss_adder->source_1_dx = dx;
1130 ss->ss_adder->source_1_y = y;
1131 ss->ss_adder->source_1_dy = dy;
1132 ss->ss_adder->cmd = RASTEROP | OCRB | S1E | DTE | function;
1140 gpx_getcmap(struct gpx_screen *ss, struct wsdisplay_cmap *cm)
1143 u_int colcount = 1 << ss->ss_depth;
1154 c = ss->ss_cmap + 0 + index * 3;
1156 *r++ = *c << (8 - ss->ss_depth), c += 3;
1161 c = ss->ss_cmap + 1 + index * 3;
1163 *r++ = *c << (8 - ss->ss_depth), c += 3;
1168 c = ss->ss_cmap + 2 + index * 3;
1170 *r++ = *c << (8 - ss->ss_depth), c += 3;
1178 gpx_putcmap(struct gpx_screen *ss, struct wsdisplay_cmap *cm)
1181 u_int colcount = 1 << ss->ss_depth;
1196 c = ss->ss_cmap + index * 3;
1198 *c++ = *nr++ >> (8 - ss->ss_depth);
1199 *c++ = *ng++ >> (8 - ss->ss_depth);
1200 *c++ = *nb++ >> (8 - ss->ss_depth);
1207 gpx_loadcmap(struct gpx_screen *ss, int from, int count)
1209 uint8_t *cmap = ss->ss_cmap;
1212 gpx_wait(ss, FRAME_SYNC);
1213 if (ss->ss_depth == 8) {
1214 struct ramdac8 *rd = ss->ss_vdac;
1221 struct ramdac4 *rd = ss->ss_vdac;
1223 cmap = ss->ss_cmap + from;
1234 gpx_resetcmap(struct gpx_screen *ss)
1237 if (ss->ss_depth == 8)
1238 memcpy(ss->ss_cmap, rasops_cmap, sizeof(ss->ss_cmap));
1240 memcpy(ss->ss_cmap, rasops_cmap, 8 * 3);
1241 memcpy(ss->ss_cmap + 8 * 3, rasops_cmap + 0xf8 * 3, 8 * 3);
1243 gpx_loadcmap(ss, 0, 1 << ss->ss_depth);
1248 if (ss->ss_depth != 8) {
1249 struct ramdac4 *rd = ss->ss_vdac;
1324 struct gpx_screen *ss = &gpx_consscr;
1334 ss->ss_depth = (0x00f0 & *(uint16_t *)(virtual_avail +
1338 ss->ss_adder = (struct adder *)virtual_avail;
1342 ss->ss_vdac = (void *)(virtual_avail + (GPX_VDAC_OFFSET & VAX_PGOFSET));
1347 ss->ss_cursor = (struct dc503reg *)virtual_avail;
1354 if (gpx_setup_screen(ss) != 0) {
1356 iounaccess((vaddr_t)ss->ss_cursor, 1);
1358 iounaccess((vaddr_t)ss->ss_vdac, 1);
1359 iounaccess((vaddr_t)ss->ss_adder, 1);
1364 ri = &ss->ss_ri;