Lines Matching refs:sisusb
86 sisusb_initialize(struct sisusb_usb_data *sisusb) in sisusb_initialize() argument
89 if (sisusb_setidxreg(sisusb, SISCR, 0x0c, 0x00)) in sisusb_initialize()
91 if (sisusb_setidxreg(sisusb, SISCR, 0x0d, 0x00)) in sisusb_initialize()
93 if (sisusb_setidxreg(sisusb, SISCR, 0x0e, 0x00)) in sisusb_initialize()
95 sisusb_setidxreg(sisusb, SISCR, 0x0f, 0x00); in sisusb_initialize()
99 sisusbcon_set_start_address(struct sisusb_usb_data *sisusb, struct vc_data *c) in sisusbcon_set_start_address() argument
101 sisusb->cur_start_addr = (c->vc_visible_origin - sisusb->scrbuf) / 2; in sisusbcon_set_start_address()
103 sisusb_setidxreg(sisusb, SISCR, 0x0c, (sisusb->cur_start_addr >> 8)); in sisusbcon_set_start_address()
104 sisusb_setidxreg(sisusb, SISCR, 0x0d, (sisusb->cur_start_addr & 0xff)); in sisusbcon_set_start_address()
108 sisusb_set_cursor(struct sisusb_usb_data *sisusb, unsigned int location) in sisusb_set_cursor() argument
110 if (sisusb->sisusb_cursor_loc == location) in sisusb_set_cursor()
113 sisusb->sisusb_cursor_loc = location; in sisusb_set_cursor()
121 sisusb->bad_cursor_pos = 1; in sisusb_set_cursor()
123 if (sisusb_setidxregandor(sisusb, SISCR, 0x0b, 0x1f, 0x20)) in sisusb_set_cursor()
125 } else if (sisusb->bad_cursor_pos) { in sisusb_set_cursor()
126 if (sisusb_setidxregand(sisusb, SISCR, 0x0b, 0x1f)) in sisusb_set_cursor()
128 sisusb->bad_cursor_pos = 0; in sisusb_set_cursor()
131 if (sisusb_setidxreg(sisusb, SISCR, 0x0e, (location >> 8))) in sisusb_set_cursor()
133 sisusb_setidxreg(sisusb, SISCR, 0x0f, (location & 0xff)); in sisusb_set_cursor()
143 sisusb_sisusb_valid(struct sisusb_usb_data *sisusb) in sisusb_sisusb_valid() argument
145 if (!sisusb->present || !sisusb->ready || !sisusb->sisusb_dev) in sisusb_sisusb_valid()
154 struct sisusb_usb_data *sisusb; in sisusb_get_sisusb_lock_and_check() local
164 sisusb = sisusb_get_sisusb(console); in sisusb_get_sisusb_lock_and_check()
165 if (!sisusb) in sisusb_get_sisusb_lock_and_check()
168 mutex_lock(&sisusb->lock); in sisusb_get_sisusb_lock_and_check()
170 if (!sisusb_sisusb_valid(sisusb) || in sisusb_get_sisusb_lock_and_check()
171 !sisusb->havethisconsole[console]) { in sisusb_get_sisusb_lock_and_check()
172 mutex_unlock(&sisusb->lock); in sisusb_get_sisusb_lock_and_check()
176 return sisusb; in sisusb_get_sisusb_lock_and_check()
180 sisusb_is_inactive(struct vc_data *c, struct sisusb_usb_data *sisusb) in sisusb_is_inactive() argument
182 if (sisusb->is_gfx || in sisusb_is_inactive()
183 sisusb->textmodedestroyed || in sisusb_is_inactive()
201 struct sisusb_usb_data *sisusb; in sisusbcon_init() local
210 sisusb = sisusb_get_sisusb(c->vc_num); in sisusbcon_init()
211 if (!sisusb) in sisusbcon_init()
214 mutex_lock(&sisusb->lock); in sisusbcon_init()
216 if (!sisusb_sisusb_valid(sisusb)) { in sisusbcon_init()
217 mutex_unlock(&sisusb->lock); in sisusbcon_init()
225 c->vc_hi_font_mask = sisusb->current_font_512 ? 0x0800 : 0; in sisusbcon_init()
227 sisusb->haveconsole = 1; in sisusbcon_init()
229 sisusb->havethisconsole[c->vc_num] = 1; in sisusbcon_init()
234 c->vc_font.height = sisusb->current_font_height; in sisusbcon_init()
249 kref_get(&sisusb->kref); in sisusbcon_init()
254 mutex_unlock(&sisusb->lock); in sisusbcon_init()
267 struct sisusb_usb_data *sisusb; in sisusbcon_deinit() local
274 sisusb = sisusb_get_sisusb(c->vc_num); in sisusbcon_deinit()
275 if (!sisusb) in sisusbcon_deinit()
278 mutex_lock(&sisusb->lock); in sisusbcon_deinit()
283 sisusb->havethisconsole[c->vc_num] = 0; in sisusbcon_deinit()
286 if (sisusb->font_backup) { in sisusbcon_deinit()
288 if (sisusb->havethisconsole[c->vc_num]) in sisusbcon_deinit()
292 vfree(sisusb->font_backup); in sisusbcon_deinit()
293 sisusb->font_backup = NULL; in sisusbcon_deinit()
297 mutex_unlock(&sisusb->lock); in sisusbcon_deinit()
300 kref_put(&sisusb->kref, sisusb_delete); in sisusbcon_deinit()
348 static inline void *sisusb_vaddr(const struct sisusb_usb_data *sisusb, in sisusb_vaddr() argument
351 return (u16 *)c->vc_origin + y * sisusb->sisusb_num_columns + x; in sisusb_vaddr()
354 static inline unsigned long sisusb_haddr(const struct sisusb_usb_data *sisusb, in sisusb_haddr() argument
357 unsigned long offset = c->vc_origin - sisusb->scrbuf; in sisusb_haddr()
360 offset += 2 * (y * sisusb->sisusb_num_columns + x); in sisusb_haddr()
362 return sisusb->vrambase + offset; in sisusb_haddr()
369 struct sisusb_usb_data *sisusb; in sisusbcon_putc() local
371 sisusb = sisusb_get_sisusb_lock_and_check(c->vc_num); in sisusbcon_putc()
372 if (!sisusb) in sisusbcon_putc()
376 if (sisusb_is_inactive(c, sisusb)) { in sisusbcon_putc()
377 mutex_unlock(&sisusb->lock); in sisusbcon_putc()
381 sisusb_copy_memory(sisusb, sisusb_vaddr(sisusb, c, x, y), in sisusbcon_putc()
382 sisusb_haddr(sisusb, c, x, y), 2); in sisusbcon_putc()
384 mutex_unlock(&sisusb->lock); in sisusbcon_putc()
392 struct sisusb_usb_data *sisusb; in sisusbcon_putcs() local
394 sisusb = sisusb_get_sisusb_lock_and_check(c->vc_num); in sisusbcon_putcs()
395 if (!sisusb) in sisusbcon_putcs()
404 memcpy(sisusb_vaddr(sisusb, c, x, y), s, count * 2); in sisusbcon_putcs()
406 if (sisusb_is_inactive(c, sisusb)) { in sisusbcon_putcs()
407 mutex_unlock(&sisusb->lock); in sisusbcon_putcs()
411 sisusb_copy_memory(sisusb, sisusb_vaddr(sisusb, c, x, y), in sisusbcon_putcs()
412 sisusb_haddr(sisusb, c, x, y), count * 2); in sisusbcon_putcs()
414 mutex_unlock(&sisusb->lock); in sisusbcon_putcs()
421 struct sisusb_usb_data *sisusb; in sisusbcon_clear() local
429 sisusb = sisusb_get_sisusb_lock_and_check(c->vc_num); in sisusbcon_clear()
430 if (!sisusb) in sisusbcon_clear()
439 dest = sisusb_vaddr(sisusb, c, x, y); in sisusbcon_clear()
441 cols = sisusb->sisusb_num_columns; in sisusbcon_clear()
457 if (sisusb_is_inactive(c, sisusb)) { in sisusbcon_clear()
458 mutex_unlock(&sisusb->lock); in sisusbcon_clear()
465 sisusb_copy_memory(sisusb, sisusb_vaddr(sisusb, c, x, y), in sisusbcon_clear()
466 sisusb_haddr(sisusb, c, x, y), length); in sisusbcon_clear()
468 mutex_unlock(&sisusb->lock); in sisusbcon_clear()
475 struct sisusb_usb_data *sisusb; in sisusbcon_switch() local
483 sisusb = sisusb_get_sisusb_lock_and_check(c->vc_num); in sisusbcon_switch()
484 if (!sisusb) in sisusbcon_switch()
490 if (sisusb_is_inactive(c, sisusb)) { in sisusbcon_switch()
491 mutex_unlock(&sisusb->lock); in sisusbcon_switch()
500 mutex_unlock(&sisusb->lock); in sisusbcon_switch()
501 dev_dbg(&sisusb->sisusb_dev->dev, "ASSERT ORIGIN != SCREENBUF!\n"); in sisusbcon_switch()
507 (int)(sisusb->scrbuf + sisusb->scrbuf_size - c->vc_origin)); in sisusbcon_switch()
512 sisusb_copy_memory(sisusb, (char *)c->vc_origin, in sisusbcon_switch()
513 sisusb_haddr(sisusb, c, 0, 0), length); in sisusbcon_switch()
515 mutex_unlock(&sisusb->lock); in sisusbcon_switch()
524 struct sisusb_usb_data *sisusb; in sisusbcon_save_screen() local
531 sisusb = sisusb_get_sisusb_lock_and_check(c->vc_num); in sisusbcon_save_screen()
532 if (!sisusb) in sisusbcon_save_screen()
537 if (sisusb_is_inactive(c, sisusb)) { in sisusbcon_save_screen()
538 mutex_unlock(&sisusb->lock); in sisusbcon_save_screen()
544 (int)(sisusb->scrbuf + sisusb->scrbuf_size - c->vc_origin)); in sisusbcon_save_screen()
549 mutex_unlock(&sisusb->lock); in sisusbcon_save_screen()
556 struct sisusb_usb_data *sisusb; in sisusbcon_set_palette() local
564 sisusb = sisusb_get_sisusb_lock_and_check(c->vc_num); in sisusbcon_set_palette()
565 if (!sisusb) in sisusbcon_set_palette()
570 if (sisusb_is_inactive(c, sisusb)) { in sisusbcon_set_palette()
571 mutex_unlock(&sisusb->lock); in sisusbcon_set_palette()
576 if (sisusb_setreg(sisusb, SISCOLIDX, table[i])) in sisusbcon_set_palette()
578 if (sisusb_setreg(sisusb, SISCOLDATA, c->vc_palette[j++] >> 2)) in sisusbcon_set_palette()
580 if (sisusb_setreg(sisusb, SISCOLDATA, c->vc_palette[j++] >> 2)) in sisusbcon_set_palette()
582 if (sisusb_setreg(sisusb, SISCOLDATA, c->vc_palette[j++] >> 2)) in sisusbcon_set_palette()
586 mutex_unlock(&sisusb->lock); in sisusbcon_set_palette()
593 struct sisusb_usb_data *sisusb; in sisusbcon_blank() local
597 sisusb = sisusb_get_sisusb_lock_and_check(c->vc_num); in sisusbcon_blank()
598 if (!sisusb) in sisusbcon_blank()
604 sisusb->is_gfx = blank ? 1 : 0; in sisusbcon_blank()
606 if (sisusb_is_inactive(c, sisusb)) { in sisusbcon_blank()
607 mutex_unlock(&sisusb->lock); in sisusbcon_blank()
618 sisusb_copy_memory(sisusb, (char *)c->vc_origin, in sisusbcon_blank()
619 sisusb_haddr(sisusb, c, 0, 0), in sisusbcon_blank()
621 sisusb->con_blanked = 1; in sisusbcon_blank()
633 sisusb->con_blanked = 0; in sisusbcon_blank()
654 mutex_unlock(&sisusb->lock); in sisusbcon_blank()
658 sisusb_setidxregandor(sisusb, SISSR, 0x01, ~0x20, sr1); in sisusbcon_blank()
659 sisusb_setidxregandor(sisusb, SISCR, 0x17, 0x7f, cr17); in sisusbcon_blank()
660 sisusb_setidxregandor(sisusb, SISSR, 0x1f, 0x3f, pmreg); in sisusbcon_blank()
661 sisusb_setidxregandor(sisusb, SISCR, 0x63, 0xbf, cr63); in sisusbcon_blank()
665 mutex_unlock(&sisusb->lock); in sisusbcon_blank()
674 struct sisusb_usb_data *sisusb; in sisusbcon_scrolldelta() local
676 sisusb = sisusb_get_sisusb_lock_and_check(c->vc_num); in sisusbcon_scrolldelta()
677 if (!sisusb) in sisusbcon_scrolldelta()
682 if (sisusb_is_inactive(c, sisusb)) { in sisusbcon_scrolldelta()
683 mutex_unlock(&sisusb->lock); in sisusbcon_scrolldelta()
687 vc_scrolldelta_helper(c, lines, sisusb->con_rolled_over, in sisusbcon_scrolldelta()
688 (void *)sisusb->scrbuf, sisusb->scrbuf_size); in sisusbcon_scrolldelta()
690 sisusbcon_set_start_address(sisusb, c); in sisusbcon_scrolldelta()
692 mutex_unlock(&sisusb->lock); in sisusbcon_scrolldelta()
699 struct sisusb_usb_data *sisusb; in sisusbcon_cursor() local
702 sisusb = sisusb_get_sisusb_lock_and_check(c->vc_num); in sisusbcon_cursor()
703 if (!sisusb) in sisusbcon_cursor()
708 if (sisusb_is_inactive(c, sisusb)) { in sisusbcon_cursor()
709 mutex_unlock(&sisusb->lock); in sisusbcon_cursor()
715 sisusbcon_set_start_address(sisusb, c); in sisusbcon_cursor()
719 sisusb_setidxregor(sisusb, SISCR, 0x0a, 0x20); in sisusbcon_cursor()
720 sisusb->sisusb_cursor_size_to = -1; in sisusbcon_cursor()
721 mutex_unlock(&sisusb->lock); in sisusbcon_cursor()
725 sisusb_set_cursor(sisusb, (c->vc_pos - sisusb->scrbuf) / 2); in sisusbcon_cursor()
751 if (sisusb->sisusb_cursor_size_from != from || in sisusbcon_cursor()
752 sisusb->sisusb_cursor_size_to != to) { in sisusbcon_cursor()
754 sisusb_setidxreg(sisusb, SISCR, 0x0a, from); in sisusbcon_cursor()
755 sisusb_setidxregandor(sisusb, SISCR, 0x0b, 0xe0, to); in sisusbcon_cursor()
757 sisusb->sisusb_cursor_size_from = from; in sisusbcon_cursor()
758 sisusb->sisusb_cursor_size_to = to; in sisusbcon_cursor()
761 mutex_unlock(&sisusb->lock); in sisusbcon_cursor()
765 sisusbcon_scroll_area(struct vc_data *c, struct sisusb_usb_data *sisusb, in sisusbcon_scroll_area() argument
769 int cols = sisusb->sisusb_num_columns; in sisusbcon_scroll_area()
784 memmove(sisusb_vaddr(sisusb, c, 0, t), in sisusbcon_scroll_area()
785 sisusb_vaddr(sisusb, c, 0, t + lines), in sisusbcon_scroll_area()
787 sisusbcon_memsetw(sisusb_vaddr(sisusb, c, 0, b - lines), in sisusbcon_scroll_area()
792 memmove(sisusb_vaddr(sisusb, c, 0, t + lines), in sisusbcon_scroll_area()
793 sisusb_vaddr(sisusb, c, 0, t), in sisusbcon_scroll_area()
795 sisusbcon_memsetw(sisusb_vaddr(sisusb, c, 0, t), eattr, in sisusbcon_scroll_area()
800 sisusb_copy_memory(sisusb, sisusb_vaddr(sisusb, c, 0, t), in sisusbcon_scroll_area()
801 sisusb_haddr(sisusb, c, 0, t), length); in sisusbcon_scroll_area()
803 mutex_unlock(&sisusb->lock); in sisusbcon_scroll_area()
813 struct sisusb_usb_data *sisusb; in sisusbcon_scroll() local
829 sisusb = sisusb_get_sisusb_lock_and_check(c->vc_num); in sisusbcon_scroll()
830 if (!sisusb) in sisusbcon_scroll()
835 if (sisusb_is_inactive(c, sisusb)) { in sisusbcon_scroll()
836 mutex_unlock(&sisusb->lock); in sisusbcon_scroll()
842 return sisusbcon_scroll_area(c, sisusb, t, b, dir, lines); in sisusbcon_scroll()
846 sisusbcon_set_start_address(sisusb, c); in sisusbcon_scroll()
860 sisusb->scrbuf + sisusb->scrbuf_size) { in sisusbcon_scroll()
861 memcpy((u16 *)sisusb->scrbuf, in sisusbcon_scroll()
864 c->vc_origin = sisusb->scrbuf; in sisusbcon_scroll()
865 sisusb->con_rolled_over = oldorigin - sisusb->scrbuf; in sisusbcon_scroll()
878 if (oldorigin - delta < sisusb->scrbuf) { in sisusbcon_scroll()
879 memmove((void *)sisusb->scrbuf + sisusb->scrbuf_size - in sisusbcon_scroll()
883 c->vc_origin = sisusb->scrbuf + in sisusbcon_scroll()
884 sisusb->scrbuf_size - in sisusbcon_scroll()
886 sisusb->con_rolled_over = 0; in sisusbcon_scroll()
899 sisusb_copy_memory(sisusb, in sisusbcon_scroll()
901 sisusb_haddr(sisusb, c, 0, 0), in sisusbcon_scroll()
904 sisusb_copy_memory(sisusb, in sisusbcon_scroll()
906 sisusb_haddr(sisusb, c, 0, 0) + in sisusbcon_scroll()
910 sisusb_copy_memory(sisusb, in sisusbcon_scroll()
912 sisusb_haddr(sisusb, c, 0, 0), in sisusbcon_scroll()
918 sisusbcon_set_start_address(sisusb, c); in sisusbcon_scroll()
922 mutex_unlock(&sisusb->lock); in sisusbcon_scroll()
931 struct sisusb_usb_data *sisusb; in sisusbcon_set_origin() local
938 sisusb = sisusb_get_sisusb_lock_and_check(c->vc_num); in sisusbcon_set_origin()
939 if (!sisusb) in sisusbcon_set_origin()
944 if (sisusb_is_inactive(c, sisusb) || sisusb->con_blanked) { in sisusbcon_set_origin()
945 mutex_unlock(&sisusb->lock); in sisusbcon_set_origin()
949 c->vc_origin = c->vc_visible_origin = sisusb->scrbuf; in sisusbcon_set_origin()
951 sisusbcon_set_start_address(sisusb, c); in sisusbcon_set_origin()
953 sisusb->con_rolled_over = 0; in sisusbcon_set_origin()
955 mutex_unlock(&sisusb->lock); in sisusbcon_set_origin()
965 struct sisusb_usb_data *sisusb; in sisusbcon_resize() local
968 sisusb = sisusb_get_sisusb_lock_and_check(c->vc_num); in sisusbcon_resize()
969 if (!sisusb) in sisusbcon_resize()
972 fh = sisusb->current_font_height; in sisusbcon_resize()
974 mutex_unlock(&sisusb->lock); in sisusbcon_resize()
990 sisusbcon_do_font_op(struct sisusb_usb_data *sisusb, int set, int slot, in sisusbcon_do_font_op() argument
1008 mutex_unlock(&sisusb->lock); in sisusbcon_do_font_op()
1013 sisusb->font_slot = slot; in sisusbcon_do_font_op()
1023 err |= sisusb_setidxreg(sisusb, SISSR, 0x00, 0x01); /* Reset */ in sisusbcon_do_font_op()
1024 err |= sisusb_setidxreg(sisusb, SISSR, 0x02, 0x04); /* Write to plane 2 */ in sisusbcon_do_font_op()
1025 err |= sisusb_setidxreg(sisusb, SISSR, 0x04, 0x07); /* Memory mode a0-bf */ in sisusbcon_do_font_op()
1026 err |= sisusb_setidxreg(sisusb, SISSR, 0x00, 0x03); /* Reset */ in sisusbcon_do_font_op()
1031 err |= sisusb_setidxreg(sisusb, SISGR, 0x04, 0x03); /* Select plane read 2 */ in sisusbcon_do_font_op()
1032 err |= sisusb_setidxreg(sisusb, SISGR, 0x05, 0x00); /* Disable odd/even */ in sisusbcon_do_font_op()
1033 err |= sisusb_setidxreg(sisusb, SISGR, 0x06, 0x00); /* Address range a0-bf */ in sisusbcon_do_font_op()
1041 err |= sisusb_writeb(sisusb, in sisusbcon_do_font_op()
1042 sisusb->vrambase + offset + i, in sisusbcon_do_font_op()
1049 err |= sisusb_readb(sisusb, in sisusbcon_do_font_op()
1050 sisusb->vrambase + offset + i, in sisusbcon_do_font_op()
1064 err |= sisusb_writeb(sisusb, in sisusbcon_do_font_op()
1065 sisusb->vrambase + offset + in sisusbcon_do_font_op()
1073 err |= sisusb_readb(sisusb, in sisusbcon_do_font_op()
1074 sisusb->vrambase + offset + in sisusbcon_do_font_op()
1086 err |= sisusb_setidxreg(sisusb, SISSR, 0x00, 0x01); /* Reset */ in sisusbcon_do_font_op()
1087 err |= sisusb_setidxreg(sisusb, SISSR, 0x02, 0x03); /* Write to planes 0+1 */ in sisusbcon_do_font_op()
1088 err |= sisusb_setidxreg(sisusb, SISSR, 0x04, 0x03); /* Memory mode a0-bf */ in sisusbcon_do_font_op()
1090 sisusb_setidxreg(sisusb, SISSR, 0x03, font_select); in sisusbcon_do_font_op()
1091 err |= sisusb_setidxreg(sisusb, SISSR, 0x00, 0x03); /* Reset end */ in sisusbcon_do_font_op()
1096 err |= sisusb_setidxreg(sisusb, SISGR, 0x04, 0x00); /* Select plane read 0 */ in sisusbcon_do_font_op()
1097 err |= sisusb_setidxreg(sisusb, SISGR, 0x05, 0x10); /* Enable odd/even */ in sisusbcon_do_font_op()
1098 err |= sisusb_setidxreg(sisusb, SISGR, 0x06, 0x06); /* Address range b8-bf */ in sisusbcon_do_font_op()
1103 if ((set) && (ch512 != sisusb->current_font_512)) { in sisusbcon_do_font_op()
1114 sisusb->current_font_512 = ch512; in sisusbcon_do_font_op()
1119 sisusb_getreg(sisusb, SISINPSTAT, &dummy); in sisusbcon_do_font_op()
1120 sisusb_setreg(sisusb, SISAR, 0x12); in sisusbcon_do_font_op()
1121 sisusb_setreg(sisusb, SISAR, ch512 ? 0x07 : 0x0f); in sisusbcon_do_font_op()
1123 sisusb_getreg(sisusb, SISINPSTAT, &dummy); in sisusbcon_do_font_op()
1124 sisusb_setreg(sisusb, SISAR, 0x20); in sisusbcon_do_font_op()
1125 sisusb_getreg(sisusb, SISINPSTAT, &dummy); in sisusbcon_do_font_op()
1147 sisusb_getidxreg(sisusb, SISCR, 0x07, &ovr); in sisusbcon_do_font_op()
1152 sisusb_setidxreg(sisusb, SISCR, 0x07, ovr); in sisusbcon_do_font_op()
1153 sisusb_setidxreg(sisusb, SISCR, 0x12, vde); in sisusbcon_do_font_op()
1157 sisusb_getidxreg(sisusb, SISCR, 0x09, &fsr); in sisusbcon_do_font_op()
1159 sisusb_setidxreg(sisusb, SISCR, 0x09, fsr); in sisusbcon_do_font_op()
1160 sisusb->current_font_height = fh; in sisusbcon_do_font_op()
1162 sisusb->sisusb_cursor_size_from = -1; in sisusbcon_do_font_op()
1163 sisusb->sisusb_cursor_size_to = -1; in sisusbcon_do_font_op()
1168 mutex_unlock(&sisusb->lock); in sisusbcon_do_font_op()
1192 mutex_unlock(&sisusb->lock); in sisusbcon_do_font_op()
1202 struct sisusb_usb_data *sisusb; in sisusbcon_font_set() local
1208 sisusb = sisusb_get_sisusb_lock_and_check(c->vc_num); in sisusbcon_font_set()
1209 if (!sisusb) in sisusbcon_font_set()
1218 if (sisusb->font_backup) { in sisusbcon_font_set()
1219 if (sisusb->font_backup_size < charcount) { in sisusbcon_font_set()
1220 vfree(sisusb->font_backup); in sisusbcon_font_set()
1221 sisusb->font_backup = NULL; in sisusbcon_font_set()
1225 if (!sisusb->font_backup) in sisusbcon_font_set()
1226 sisusb->font_backup = vmalloc(array_size(charcount, 32)); in sisusbcon_font_set()
1228 if (sisusb->font_backup) { in sisusbcon_font_set()
1229 memcpy(sisusb->font_backup, font->data, charcount * 32); in sisusbcon_font_set()
1230 sisusb->font_backup_size = charcount; in sisusbcon_font_set()
1231 sisusb->font_backup_height = font->height; in sisusbcon_font_set()
1232 sisusb->font_backup_512 = (charcount == 512) ? 1 : 0; in sisusbcon_font_set()
1237 return sisusbcon_do_font_op(sisusb, 1, 2, font->data, in sisusbcon_font_set()
1247 struct sisusb_usb_data *sisusb; in sisusbcon_font_get() local
1249 sisusb = sisusb_get_sisusb_lock_and_check(c->vc_num); in sisusbcon_font_get()
1250 if (!sisusb) in sisusbcon_font_get()
1260 mutex_unlock(&sisusb->lock); in sisusbcon_font_get()
1264 if (!sisusb->font_backup) { in sisusbcon_font_get()
1265 mutex_unlock(&sisusb->lock); in sisusbcon_font_get()
1270 memcpy(font->data, sisusb->font_backup, 256 * 32); in sisusbcon_font_get()
1272 mutex_unlock(&sisusb->lock); in sisusbcon_font_get()
1383 sisusb_console_init(struct sisusb_usb_data *sisusb, int first, int last) in sisusb_console_init() argument
1387 mutex_lock(&sisusb->lock); in sisusb_console_init()
1390 if (sisusb->haveconsole || !sisusb->SiS_Pr) { in sisusb_console_init()
1391 mutex_unlock(&sisusb->lock); in sisusb_console_init()
1395 sisusb->con_first = first; in sisusb_console_init()
1396 sisusb->con_last = last; in sisusb_console_init()
1401 mutex_unlock(&sisusb->lock); in sisusb_console_init()
1406 if (!sisusb->gfxinit || first < 1 || last < 1) { in sisusb_console_init()
1407 mutex_unlock(&sisusb->lock); in sisusb_console_init()
1411 sisusb->sisusb_cursor_loc = -1; in sisusb_console_init()
1412 sisusb->sisusb_cursor_size_from = -1; in sisusb_console_init()
1413 sisusb->sisusb_cursor_size_to = -1; in sisusb_console_init()
1416 if (sisusb_reset_text_mode(sisusb, 1)) { in sisusb_console_init()
1417 mutex_unlock(&sisusb->lock); in sisusb_console_init()
1418 dev_err(&sisusb->sisusb_dev->dev, "Failed to set up text mode\n"); in sisusb_console_init()
1423 sisusb_initialize(sisusb); in sisusb_console_init()
1427 mysisusbs[i] = sisusb; in sisusb_console_init()
1431 sisusb->sisusb_num_columns = 80; in sisusb_console_init()
1434 sisusb->scrbuf_size = 32 * 1024; in sisusb_console_init()
1437 if (!(sisusb->scrbuf = (unsigned long)vmalloc(sisusb->scrbuf_size))) { in sisusb_console_init()
1438 mutex_unlock(&sisusb->lock); in sisusb_console_init()
1439 dev_err(&sisusb->sisusb_dev->dev, "Failed to allocate screen buffer\n"); in sisusb_console_init()
1443 mutex_unlock(&sisusb->lock); in sisusb_console_init()
1450 sisusb->haveconsole = 1; in sisusb_console_init()
1460 sisusb_console_exit(struct sisusb_usb_data *sisusb) in sisusb_console_exit() argument
1490 if (sisusb->haveconsole) { in sisusb_console_exit()
1492 if (sisusb->havethisconsole[i]) { in sisusb_console_exit()
1500 sisusb->haveconsole = 0; in sisusb_console_exit()
1503 vfree((void *)sisusb->scrbuf); in sisusb_console_exit()
1504 sisusb->scrbuf = 0; in sisusb_console_exit()
1506 vfree(sisusb->font_backup); in sisusb_console_exit()
1507 sisusb->font_backup = NULL; in sisusb_console_exit()