• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /netgear-WNDR4500-V1.0.1.40_1.0.68/src/linux/linux-2.6/drivers/usb/misc/sisusbvga/

Lines Matching refs:sisusb

2  * sisusb - usb kernel driver for SiS315(E) based USB2VGA dongles
69 #include "sisusb.h"
79 /* vc_data -> sisusb conversion table */
94 sisusb_initialize(struct sisusb_usb_data *sisusb)
97 if (sisusb_setidxreg(sisusb, SISCR, 0x0c, 0x00))
99 if (sisusb_setidxreg(sisusb, SISCR, 0x0d, 0x00))
101 if (sisusb_setidxreg(sisusb, SISCR, 0x0e, 0x00))
103 sisusb_setidxreg(sisusb, SISCR, 0x0f, 0x00);
107 sisusbcon_set_start_address(struct sisusb_usb_data *sisusb, struct vc_data *c)
109 sisusb->cur_start_addr = (c->vc_visible_origin - sisusb->scrbuf) / 2;
111 sisusb_setidxreg(sisusb, SISCR, 0x0c, (sisusb->cur_start_addr >> 8));
112 sisusb_setidxreg(sisusb, SISCR, 0x0d, (sisusb->cur_start_addr & 0xff));
116 sisusb_set_cursor(struct sisusb_usb_data *sisusb, unsigned int location)
118 if (sisusb->sisusb_cursor_loc == location)
121 sisusb->sisusb_cursor_loc = location;
125 sisusb->bad_cursor_pos = 1;
127 if (sisusb_setidxregandor(sisusb, SISCR, 0x0b, 0x1f, 0x20))
129 } else if (sisusb->bad_cursor_pos) {
130 if (sisusb_setidxregand(sisusb, SISCR, 0x0b, 0x1f))
132 sisusb->bad_cursor_pos = 0;
135 if (sisusb_setidxreg(sisusb, SISCR, 0x0e, (location >> 8)))
137 sisusb_setidxreg(sisusb, SISCR, 0x0f, (location & 0xff));
147 sisusb_sisusb_valid(struct sisusb_usb_data *sisusb)
149 if (!sisusb->present || !sisusb->ready || !sisusb->sisusb_dev)
158 struct sisusb_usb_data *sisusb;
168 if (!(sisusb = sisusb_get_sisusb(console)))
171 mutex_lock(&sisusb->lock);
173 if (!sisusb_sisusb_valid(sisusb) ||
174 !sisusb->havethisconsole[console]) {
175 mutex_unlock(&sisusb->lock);
179 return sisusb;
183 sisusb_is_inactive(struct vc_data *c, struct sisusb_usb_data *sisusb)
185 if (sisusb->is_gfx ||
186 sisusb->textmodedestroyed ||
204 struct sisusb_usb_data *sisusb;
215 if (!(sisusb = sisusb_get_sisusb(c->vc_num))) {
220 mutex_lock(&sisusb->lock);
222 if (!sisusb_sisusb_valid(sisusb)) {
223 mutex_unlock(&sisusb->lock);
232 c->vc_hi_font_mask = sisusb->current_font_512 ? 0x0800 : 0;
234 sisusb->haveconsole = 1;
236 sisusb->havethisconsole[c->vc_num] = 1;
241 c->vc_font.height = sisusb->current_font_height;
247 /* Increment usage count for our sisusb.
250 * lose our sisusb until this is undone
253 * use sisusb->lock and do a quick check
254 * of sisusb for device disconnection.
256 kref_get(&sisusb->kref);
261 mutex_unlock(&sisusb->lock);
276 struct sisusb_usb_data *sisusb;
285 if (!(sisusb = sisusb_get_sisusb(c->vc_num))) {
290 mutex_lock(&sisusb->lock);
295 sisusb->havethisconsole[c->vc_num] = 0;
298 if (sisusb->font_backup) {
300 if (sisusb->havethisconsole[c->vc_num])
304 vfree(sisusb->font_backup);
305 sisusb->font_backup = NULL;
309 mutex_unlock(&sisusb->lock);
311 /* decrement the usage count on our sisusb */
312 kref_put(&sisusb->kref, sisusb_delete);
366 (y) * sisusb->sisusb_num_columns + \
370 ((u16 *)(sisusb->vrambase + (c->vc_origin - sisusb->scrbuf)) + \
371 (y) * sisusb->sisusb_num_columns + \
378 struct sisusb_usb_data *sisusb;
381 if (!(sisusb = sisusb_get_sisusb_lock_and_check(c->vc_num)))
384 /* sisusb->lock is down */
390 if (sisusb_is_inactive(c, sisusb)) {
391 mutex_unlock(&sisusb->lock);
396 sisusb_copy_memory(sisusb, (char *)SISUSB_VADDR(x, y),
399 mutex_unlock(&sisusb->lock);
407 struct sisusb_usb_data *sisusb;
412 if (!(sisusb = sisusb_get_sisusb_lock_and_check(c->vc_num)))
415 /* sisusb->lock is down */
426 if (sisusb_is_inactive(c, sisusb)) {
427 mutex_unlock(&sisusb->lock);
431 sisusb_copy_memory(sisusb, (char *)SISUSB_VADDR(x, y),
434 mutex_unlock(&sisusb->lock);
441 struct sisusb_usb_data *sisusb;
450 if (!(sisusb = sisusb_get_sisusb_lock_and_check(c->vc_num)))
453 /* sisusb->lock is down */
461 cols = sisusb->sisusb_num_columns;
477 if (sisusb_is_inactive(c, sisusb)) {
478 mutex_unlock(&sisusb->lock);
485 sisusb_copy_memory(sisusb, (unsigned char *)SISUSB_VADDR(x, y),
488 mutex_unlock(&sisusb->lock);
496 struct sisusb_usb_data *sisusb;
503 if (!(sisusb = sisusb_get_sisusb_lock_and_check(c->vc_num)))
506 /* sisusb->lock is down */
508 cols = sisusb->sisusb_num_columns;
515 if (sisusb_is_inactive(c, sisusb)) {
516 mutex_unlock(&sisusb->lock);
523 sisusb_copy_memory(sisusb, (unsigned char *)SISUSB_VADDR(dx, dy),
526 mutex_unlock(&sisusb->lock);
533 struct sisusb_usb_data *sisusb;
542 if (!(sisusb = sisusb_get_sisusb_lock_and_check(c->vc_num)))
545 /* sisusb->lock is down */
548 if (sisusb_is_inactive(c, sisusb)) {
549 mutex_unlock(&sisusb->lock);
558 mutex_unlock(&sisusb->lock);
559 printk(KERN_DEBUG "sisusb: ASSERT ORIGIN != SCREENBUF!\n");
565 (int)(sisusb->scrbuf + sisusb->scrbuf_size - c->vc_origin));
571 sisusb_copy_memory(sisusb, (unsigned char *)c->vc_origin,
575 mutex_unlock(&sisusb->lock);
584 struct sisusb_usb_data *sisusb;
591 if (!(sisusb = sisusb_get_sisusb_lock_and_check(c->vc_num)))
594 /* sisusb->lock is down */
596 if (sisusb_is_inactive(c, sisusb)) {
597 mutex_unlock(&sisusb->lock);
603 (int)(sisusb->scrbuf + sisusb->scrbuf_size - c->vc_origin));
609 mutex_unlock(&sisusb->lock);
616 struct sisusb_usb_data *sisusb;
624 if (!(sisusb = sisusb_get_sisusb_lock_and_check(c->vc_num)))
627 /* sisusb->lock is down */
629 if (sisusb_is_inactive(c, sisusb)) {
630 mutex_unlock(&sisusb->lock);
635 if (sisusb_setreg(sisusb, SISCOLIDX, table[i]))
637 if (sisusb_setreg(sisusb, SISCOLDATA, c->vc_palette[j++] >> 2))
639 if (sisusb_setreg(sisusb, SISCOLDATA, c->vc_palette[j++] >> 2))
641 if (sisusb_setreg(sisusb, SISCOLDATA, c->vc_palette[j++] >> 2))
645 mutex_unlock(&sisusb->lock);
654 struct sisusb_usb_data *sisusb;
659 if (!(sisusb = sisusb_get_sisusb_lock_and_check(c->vc_num)))
662 /* sisusb->lock is down */
665 sisusb->is_gfx = blank ? 1 : 0;
667 if (sisusb_is_inactive(c, sisusb)) {
668 mutex_unlock(&sisusb->lock);
679 sisusb_copy_memory(sisusb,
681 (u32)(sisusb->vrambase +
682 (c->vc_origin - sisusb->scrbuf)),
684 sisusb->con_blanked = 1;
696 sisusb->con_blanked = 0;
717 mutex_unlock(&sisusb->lock);
721 sisusb_setidxregandor(sisusb, SISSR, 0x01, ~0x20, sr1);
722 sisusb_setidxregandor(sisusb, SISCR, 0x17, 0x7f, cr17);
723 sisusb_setidxregandor(sisusb, SISSR, 0x1f, 0x3f, pmreg);
724 sisusb_setidxregandor(sisusb, SISCR, 0x63, 0xbf, cr63);
728 mutex_unlock(&sisusb->lock);
737 struct sisusb_usb_data *sisusb;
743 if (!(sisusb = sisusb_get_sisusb_lock_and_check(c->vc_num)))
746 /* sisusb->lock is down */
748 if (sisusb_is_inactive(c, sisusb)) {
749 mutex_unlock(&sisusb->lock);
757 if (sisusb->con_rolled_over >
758 (c->vc_scr_end - sisusb->scrbuf) + margin) {
760 ul = c->vc_scr_end - sisusb->scrbuf;
761 we = sisusb->con_rolled_over + c->vc_size_row;
766 we = sisusb->scrbuf_size;
770 p = (c->vc_visible_origin - sisusb->scrbuf - ul + we) % we +
773 st = (c->vc_origin - sisusb->scrbuf - ul + we) % we;
784 c->vc_visible_origin = sisusb->scrbuf + (p + ul) % we;
787 sisusbcon_set_start_address(sisusb, c);
789 mutex_unlock(&sisusb->lock);
798 struct sisusb_usb_data *sisusb;
801 if (!(sisusb = sisusb_get_sisusb_lock_and_check(c->vc_num)))
804 /* sisusb->lock is down */
806 if (sisusb_is_inactive(c, sisusb)) {
807 mutex_unlock(&sisusb->lock);
813 sisusbcon_set_start_address(sisusb, c);
817 sisusb_setidxregor(sisusb, SISCR, 0x0a, 0x20);
818 sisusb->sisusb_cursor_size_to = -1;
819 mutex_unlock(&sisusb->lock);
823 sisusb_set_cursor(sisusb, (c->vc_pos - sisusb->scrbuf) / 2);
849 if (sisusb->sisusb_cursor_size_from != from ||
850 sisusb->sisusb_cursor_size_to != to) {
852 sisusb_setidxreg(sisusb, SISCR, 0x0a, from);
853 sisusb_setidxregandor(sisusb, SISCR, 0x0b, 0xe0, to);
855 sisusb->sisusb_cursor_size_from = from;
856 sisusb->sisusb_cursor_size_to = to;
859 mutex_unlock(&sisusb->lock);
863 sisusbcon_scroll_area(struct vc_data *c, struct sisusb_usb_data *sisusb,
866 int cols = sisusb->sisusb_num_columns;
871 /* sisusb->lock is down */
898 sisusb_copy_memory(sisusb, (char *)SISUSB_VADDR(0, t),
901 mutex_unlock(&sisusb->lock);
910 struct sisusb_usb_data *sisusb;
928 if (!(sisusb = sisusb_get_sisusb_lock_and_check(c->vc_num)))
931 /* sisusb->lock is down */
933 if (sisusb_is_inactive(c, sisusb)) {
934 mutex_unlock(&sisusb->lock);
940 return sisusbcon_scroll_area(c, sisusb, t, b, dir, lines);
944 sisusbcon_set_start_address(sisusb, c);
958 sisusb->scrbuf + sisusb->scrbuf_size) {
959 sisusbcon_memcpyw((u16 *)sisusb->scrbuf,
962 c->vc_origin = sisusb->scrbuf;
963 sisusb->con_rolled_over = oldorigin - sisusb->scrbuf;
976 if (oldorigin - delta < sisusb->scrbuf) {
977 sisusbcon_memmovew((u16 *)(sisusb->scrbuf +
978 sisusb->scrbuf_size -
983 c->vc_origin = sisusb->scrbuf +
984 sisusb->scrbuf_size -
986 sisusb->con_rolled_over = 0;
998 originoffset = (u32)(c->vc_origin - sisusb->scrbuf);
1001 sisusb_copy_memory(sisusb,
1003 (u32)(sisusb->vrambase + originoffset),
1006 sisusb_copy_memory(sisusb,
1008 (u32)sisusb->vrambase + originoffset +
1012 sisusb_copy_memory(sisusb,
1014 (u32)(sisusb->vrambase + originoffset),
1020 sisusbcon_set_start_address(sisusb, c);
1024 mutex_unlock(&sisusb->lock);
1033 struct sisusb_usb_data *sisusb;
1040 if (!(sisusb = sisusb_get_sisusb_lock_and_check(c->vc_num)))
1043 /* sisusb->lock is down */
1045 if (sisusb_is_inactive(c, sisusb) || sisusb->con_blanked) {
1046 mutex_unlock(&sisusb->lock);
1050 c->vc_origin = c->vc_visible_origin = sisusb->scrbuf;
1052 sisusbcon_set_start_address(sisusb, c);
1054 sisusb->con_rolled_over = 0;
1056 mutex_unlock(&sisusb->lock);
1065 struct sisusb_usb_data *sisusb;
1068 if (!(sisusb = sisusb_get_sisusb_lock_and_check(c->vc_num)))
1071 fh = sisusb->current_font_height;
1073 mutex_unlock(&sisusb->lock);
1089 sisusbcon_do_font_op(struct sisusb_usb_data *sisusb, int set, int slot,
1097 /* sisusb->lock is down */
1107 mutex_unlock(&sisusb->lock);
1112 sisusb->font_slot = slot;
1122 err |= sisusb_setidxreg(sisusb, SISSR, 0x00, 0x01); /* Reset */
1123 err |= sisusb_setidxreg(sisusb, SISSR, 0x02, 0x04); /* Write to plane 2 */
1124 err |= sisusb_setidxreg(sisusb, SISSR, 0x04, 0x07); /* Memory mode a0-bf */
1125 err |= sisusb_setidxreg(sisusb, SISSR, 0x00, 0x03); /* Reset */
1130 err |= sisusb_setidxreg(sisusb, SISGR, 0x04, 0x03); /* Select plane read 2 */
1131 err |= sisusb_setidxreg(sisusb, SISGR, 0x05, 0x00); /* Disable odd/even */
1132 err |= sisusb_setidxreg(sisusb, SISGR, 0x06, 0x00); /* Address range a0-bf */
1140 err |= sisusb_writeb(sisusb,
1141 sisusb->vrambase + offset + i,
1148 err |= sisusb_readb(sisusb,
1149 sisusb->vrambase + offset + i,
1163 err |= sisusb_writeb(sisusb,
1164 sisusb->vrambase + offset +
1172 err |= sisusb_readb(sisusb,
1173 sisusb->vrambase + offset +
1185 err |= sisusb_setidxreg(sisusb, SISSR, 0x00, 0x01); /* Reset */
1186 err |= sisusb_setidxreg(sisusb, SISSR, 0x02, 0x03); /* Write to planes 0+1 */
1187 err |= sisusb_setidxreg(sisusb, SISSR, 0x04, 0x03); /* Memory mode a0-bf */
1189 sisusb_setidxreg(sisusb, SISSR, 0x03, font_select);
1190 err |= sisusb_setidxreg(sisusb, SISSR, 0x00, 0x03); /* Reset end */
1195 err |= sisusb_setidxreg(sisusb, SISGR, 0x04, 0x00); /* Select plane read 0 */
1196 err |= sisusb_setidxreg(sisusb, SISGR, 0x05, 0x10); /* Enable odd/even */
1197 err |= sisusb_setidxreg(sisusb, SISGR, 0x06, 0x06); /* Address range b8-bf */
1202 if ((set) && (ch512 != sisusb->current_font_512)) {
1213 sisusb->current_font_512 = ch512;
1218 sisusb_getreg(sisusb, SISINPSTAT, &dummy);
1219 sisusb_setreg(sisusb, SISAR, 0x12);
1220 sisusb_setreg(sisusb, SISAR, ch512 ? 0x07 : 0x0f);
1222 sisusb_getreg(sisusb, SISINPSTAT, &dummy);
1223 sisusb_setreg(sisusb, SISAR, 0x20);
1224 sisusb_getreg(sisusb, SISINPSTAT, &dummy);
1243 /*printk(KERN_DEBUG "sisusb recalc rows %d maxscan %d fh %d sl %d\n",
1246 sisusb_getidxreg(sisusb, SISCR, 0x07, &ovr);
1251 sisusb_setidxreg(sisusb, SISCR, 0x07, ovr);
1252 sisusb_setidxreg(sisusb, SISCR, 0x12, vde);
1256 sisusb_getidxreg(sisusb, SISCR, 0x09, &fsr);
1258 sisusb_setidxreg(sisusb, SISCR, 0x09, fsr);
1259 sisusb->current_font_height = fh;
1261 sisusb->sisusb_cursor_size_from = -1;
1262 sisusb->sisusb_cursor_size_to = -1;
1267 mutex_unlock(&sisusb->lock);
1291 mutex_unlock(&sisusb->lock);
1301 struct sisusb_usb_data *sisusb;
1307 if (!(sisusb = sisusb_get_sisusb_lock_and_check(c->vc_num)))
1310 /* sisusb->lock is down */
1316 if (sisusb->font_backup) {
1317 if (sisusb->font_backup_size < charcount) {
1318 vfree(sisusb->font_backup);
1319 sisusb->font_backup = NULL;
1323 if (!sisusb->font_backup)
1324 sisusb->font_backup = vmalloc(charcount * 32);
1326 if (sisusb->font_backup) {
1327 memcpy(sisusb->font_backup, font->data, charcount * 32);
1328 sisusb->font_backup_size = charcount;
1329 sisusb->font_backup_height = font->height;
1330 sisusb->font_backup_512 = (charcount == 512) ? 1 : 0;
1333 /* do_font_op ups sisusb->lock */
1335 return sisusbcon_do_font_op(sisusb, 1, 2, font->data,
1345 struct sisusb_usb_data *sisusb;
1347 if (!(sisusb = sisusb_get_sisusb_lock_and_check(c->vc_num)))
1350 /* sisusb->lock is down */
1357 mutex_unlock(&sisusb->lock);
1361 if (!sisusb->font_backup) {
1362 mutex_unlock(&sisusb->lock);
1367 memcpy(font->data, sisusb->font_backup, 256 * 32);
1369 mutex_unlock(&sisusb->lock);
1375 * The console `switch' structure for the sisusb console
1448 sisusb_console_init(struct sisusb_usb_data *sisusb, int first, int last)
1450 int i, ret, minor = sisusb->minor;
1454 mutex_lock(&sisusb->lock);
1457 if (sisusb->haveconsole || !sisusb->SiS_Pr) {
1458 mutex_unlock(&sisusb->lock);
1463 sisusb->con_first = first;
1464 sisusb->con_last = last;
1469 mutex_unlock(&sisusb->lock);
1475 if (!sisusb->gfxinit || first < 1 || last < 1) {
1476 mutex_unlock(&sisusb->lock);
1481 sisusb->sisusb_cursor_loc = -1;
1482 sisusb->sisusb_cursor_size_from = -1;
1483 sisusb->sisusb_cursor_size_to = -1;
1486 if (sisusb_reset_text_mode(sisusb, 1)) {
1487 mutex_unlock(&sisusb->lock);
1496 sisusb_initialize(sisusb);
1499 /* Save sisusb for our interface routines */
1500 mysisusbs[i] = sisusb;
1504 sisusb->sisusb_num_columns = 80;
1507 sisusb->scrbuf_size = 32 * 1024;
1510 if (!(sisusb->scrbuf = (unsigned long)vmalloc(sisusb->scrbuf_size))) {
1511 mutex_unlock(&sisusb->lock);
1519 mutex_unlock(&sisusb->lock);
1526 sisusb->haveconsole = 1;
1536 sisusb_console_exit(struct sisusb_usb_data *sisusb)
1543 * can't lose our sisusb any other way but by
1566 if (sisusb->haveconsole) {
1568 if (sisusb->havethisconsole[i])
1573 sisusb->haveconsole = 0;
1576 vfree((void *)sisusb->scrbuf);
1577 sisusb->scrbuf = 0;
1579 vfree(sisusb->font_backup);
1580 sisusb->font_backup = NULL;