.. | .. |
---|
70 | 70 | #include "sisusb.h" |
---|
71 | 71 | #include "sisusb_init.h" |
---|
72 | 72 | |
---|
73 | | -#ifdef INCL_SISUSB_CON |
---|
74 | | - |
---|
75 | | -#define sisusbcon_writew(val, addr) (*(addr) = (val)) |
---|
76 | | -#define sisusbcon_readw(addr) (*(addr)) |
---|
77 | | -#define sisusbcon_memmovew(d, s, c) memmove(d, s, c) |
---|
78 | | -#define sisusbcon_memcpyw(d, s, c) memcpy(d, s, c) |
---|
79 | | - |
---|
80 | 73 | /* vc_data -> sisusb conversion table */ |
---|
81 | 74 | static struct sisusb_usb_data *mysisusbs[MAX_NR_CONSOLES]; |
---|
82 | 75 | |
---|
.. | .. |
---|
86 | 79 | static inline void |
---|
87 | 80 | sisusbcon_memsetw(u16 *s, u16 c, unsigned int count) |
---|
88 | 81 | { |
---|
89 | | - count /= 2; |
---|
90 | | - while (count--) |
---|
91 | | - sisusbcon_writew(c, s++); |
---|
| 82 | + memset16(s, c, count / 2); |
---|
92 | 83 | } |
---|
93 | 84 | |
---|
94 | 85 | static inline void |
---|
.. | .. |
---|
311 | 302 | |
---|
312 | 303 | /* interface routine */ |
---|
313 | 304 | static u8 |
---|
314 | | -sisusbcon_build_attr(struct vc_data *c, u8 color, u8 intensity, |
---|
315 | | - u8 blink, u8 underline, u8 reverse, u8 unused) |
---|
| 305 | +sisusbcon_build_attr(struct vc_data *c, u8 color, enum vc_intensity intensity, |
---|
| 306 | + bool blink, bool underline, bool reverse, |
---|
| 307 | + bool unused) |
---|
316 | 308 | { |
---|
317 | 309 | u8 attr = color; |
---|
318 | 310 | |
---|
319 | 311 | if (underline) |
---|
320 | 312 | attr = (attr & 0xf0) | c->vc_ulcolor; |
---|
321 | | - else if (intensity == 0) |
---|
| 313 | + else if (intensity == VCI_HALF_BRIGHT) |
---|
322 | 314 | attr = (attr & 0xf0) | c->vc_halfcolor; |
---|
323 | 315 | |
---|
324 | 316 | if (reverse) |
---|
.. | .. |
---|
329 | 321 | if (blink) |
---|
330 | 322 | attr ^= 0x80; |
---|
331 | 323 | |
---|
332 | | - if (intensity == 2) |
---|
| 324 | + if (intensity == VCI_BOLD) |
---|
333 | 325 | attr ^= 0x08; |
---|
334 | 326 | |
---|
335 | 327 | return attr; |
---|
.. | .. |
---|
346 | 338 | */ |
---|
347 | 339 | |
---|
348 | 340 | while (count--) { |
---|
349 | | - u16 a = sisusbcon_readw(p); |
---|
| 341 | + u16 a = *p; |
---|
350 | 342 | |
---|
351 | | - a = ((a) & 0x88ff) | |
---|
352 | | - (((a) & 0x7000) >> 4) | |
---|
353 | | - (((a) & 0x0700) << 4); |
---|
354 | | - |
---|
355 | | - sisusbcon_writew(a, p++); |
---|
| 343 | + *p++ = ((a) & 0x88ff) | |
---|
| 344 | + (((a) & 0x7000) >> 4) | |
---|
| 345 | + (((a) & 0x0700) << 4); |
---|
356 | 346 | } |
---|
357 | 347 | } |
---|
358 | 348 | |
---|
359 | | -#define SISUSB_VADDR(x,y) \ |
---|
360 | | - ((u16 *)c->vc_origin + \ |
---|
361 | | - (y) * sisusb->sisusb_num_columns + \ |
---|
362 | | - (x)) |
---|
| 349 | +static inline void *sisusb_vaddr(const struct sisusb_usb_data *sisusb, |
---|
| 350 | + const struct vc_data *c, unsigned int x, unsigned int y) |
---|
| 351 | +{ |
---|
| 352 | + return (u16 *)c->vc_origin + y * sisusb->sisusb_num_columns + x; |
---|
| 353 | +} |
---|
363 | 354 | |
---|
364 | | -#define SISUSB_HADDR(x,y) \ |
---|
365 | | - ((u16 *)(sisusb->vrambase + (c->vc_origin - sisusb->scrbuf)) + \ |
---|
366 | | - (y) * sisusb->sisusb_num_columns + \ |
---|
367 | | - (x)) |
---|
| 355 | +static inline unsigned long sisusb_haddr(const struct sisusb_usb_data *sisusb, |
---|
| 356 | + const struct vc_data *c, unsigned int x, unsigned int y) |
---|
| 357 | +{ |
---|
| 358 | + unsigned long offset = c->vc_origin - sisusb->scrbuf; |
---|
| 359 | + |
---|
| 360 | + /* 2 bytes per each character */ |
---|
| 361 | + offset += 2 * (y * sisusb->sisusb_num_columns + x); |
---|
| 362 | + |
---|
| 363 | + return sisusb->vrambase + offset; |
---|
| 364 | +} |
---|
368 | 365 | |
---|
369 | 366 | /* Interface routine */ |
---|
370 | 367 | static void |
---|
.. | .. |
---|
382 | 379 | return; |
---|
383 | 380 | } |
---|
384 | 381 | |
---|
385 | | - |
---|
386 | | - sisusb_copy_memory(sisusb, (char *)SISUSB_VADDR(x, y), |
---|
387 | | - (long)SISUSB_HADDR(x, y), 2); |
---|
| 382 | + sisusb_copy_memory(sisusb, sisusb_vaddr(sisusb, c, x, y), |
---|
| 383 | + sisusb_haddr(sisusb, c, x, y), 2); |
---|
388 | 384 | |
---|
389 | 385 | mutex_unlock(&sisusb->lock); |
---|
390 | 386 | } |
---|
.. | .. |
---|
395 | 391 | int count, int y, int x) |
---|
396 | 392 | { |
---|
397 | 393 | struct sisusb_usb_data *sisusb; |
---|
398 | | - u16 *dest; |
---|
399 | | - int i; |
---|
400 | 394 | |
---|
401 | 395 | sisusb = sisusb_get_sisusb_lock_and_check(c->vc_num); |
---|
402 | 396 | if (!sisusb) |
---|
.. | .. |
---|
408 | 402 | * because the vt does this AFTER calling us. |
---|
409 | 403 | */ |
---|
410 | 404 | |
---|
411 | | - dest = SISUSB_VADDR(x, y); |
---|
412 | | - |
---|
413 | | - for (i = count; i > 0; i--) |
---|
414 | | - sisusbcon_writew(sisusbcon_readw(s++), dest++); |
---|
| 405 | + memcpy(sisusb_vaddr(sisusb, c, x, y), s, count * 2); |
---|
415 | 406 | |
---|
416 | 407 | if (sisusb_is_inactive(c, sisusb)) { |
---|
417 | 408 | mutex_unlock(&sisusb->lock); |
---|
418 | 409 | return; |
---|
419 | 410 | } |
---|
420 | 411 | |
---|
421 | | - sisusb_copy_memory(sisusb, (char *)SISUSB_VADDR(x, y), |
---|
422 | | - (long)SISUSB_HADDR(x, y), count * 2); |
---|
| 412 | + sisusb_copy_memory(sisusb, sisusb_vaddr(sisusb, c, x, y), |
---|
| 413 | + sisusb_haddr(sisusb, c, x, y), count * 2); |
---|
423 | 414 | |
---|
424 | 415 | mutex_unlock(&sisusb->lock); |
---|
425 | 416 | } |
---|
.. | .. |
---|
446 | 437 | * this AFTER calling us. |
---|
447 | 438 | */ |
---|
448 | 439 | |
---|
449 | | - dest = SISUSB_VADDR(x, y); |
---|
| 440 | + dest = sisusb_vaddr(sisusb, c, x, y); |
---|
450 | 441 | |
---|
451 | 442 | cols = sisusb->sisusb_num_columns; |
---|
452 | 443 | |
---|
.. | .. |
---|
472 | 463 | length = ((height * cols) - x - (cols - width - x)) * 2; |
---|
473 | 464 | |
---|
474 | 465 | |
---|
475 | | - sisusb_copy_memory(sisusb, (unsigned char *)SISUSB_VADDR(x, y), |
---|
476 | | - (long)SISUSB_HADDR(x, y), length); |
---|
| 466 | + sisusb_copy_memory(sisusb, sisusb_vaddr(sisusb, c, x, y), |
---|
| 467 | + sisusb_haddr(sisusb, c, x, y), length); |
---|
477 | 468 | |
---|
478 | 469 | mutex_unlock(&sisusb->lock); |
---|
479 | 470 | } |
---|
.. | .. |
---|
517 | 508 | (int)(sisusb->scrbuf + sisusb->scrbuf_size - c->vc_origin)); |
---|
518 | 509 | |
---|
519 | 510 | /* Restore the screen contents */ |
---|
520 | | - sisusbcon_memcpyw((u16 *)c->vc_origin, (u16 *)c->vc_screenbuf, |
---|
521 | | - length); |
---|
| 511 | + memcpy((u16 *)c->vc_origin, (u16 *)c->vc_screenbuf, length); |
---|
522 | 512 | |
---|
523 | | - sisusb_copy_memory(sisusb, (unsigned char *)c->vc_origin, |
---|
524 | | - (long)SISUSB_HADDR(0, 0), |
---|
525 | | - length); |
---|
| 513 | + sisusb_copy_memory(sisusb, (u8 *)c->vc_origin, |
---|
| 514 | + sisusb_haddr(sisusb, c, 0, 0), length); |
---|
526 | 515 | |
---|
527 | 516 | mutex_unlock(&sisusb->lock); |
---|
528 | 517 | |
---|
.. | .. |
---|
556 | 545 | (int)(sisusb->scrbuf + sisusb->scrbuf_size - c->vc_origin)); |
---|
557 | 546 | |
---|
558 | 547 | /* Save the screen contents to vc's private buffer */ |
---|
559 | | - sisusbcon_memcpyw((u16 *)c->vc_screenbuf, (u16 *)c->vc_origin, |
---|
560 | | - length); |
---|
| 548 | + memcpy((u16 *)c->vc_screenbuf, (u16 *)c->vc_origin, length); |
---|
561 | 549 | |
---|
562 | 550 | mutex_unlock(&sisusb->lock); |
---|
563 | 551 | } |
---|
.. | .. |
---|
628 | 616 | sisusbcon_memsetw((u16 *)c->vc_origin, |
---|
629 | 617 | c->vc_video_erase_char, |
---|
630 | 618 | c->vc_screenbuf_size); |
---|
631 | | - sisusb_copy_memory(sisusb, |
---|
632 | | - (unsigned char *)c->vc_origin, |
---|
633 | | - (u32)(sisusb->vrambase + |
---|
634 | | - (c->vc_origin - sisusb->scrbuf)), |
---|
| 619 | + sisusb_copy_memory(sisusb, (u8 *)c->vc_origin, |
---|
| 620 | + sisusb_haddr(sisusb, c, 0, 0), |
---|
635 | 621 | c->vc_screenbuf_size); |
---|
636 | 622 | sisusb->con_blanked = 1; |
---|
637 | 623 | ret = 1; |
---|
.. | .. |
---|
741 | 727 | |
---|
742 | 728 | baseline = c->vc_font.height - (c->vc_font.height < 10 ? 1 : 2); |
---|
743 | 729 | |
---|
744 | | - switch (c->vc_cursor_type & 0x0f) { |
---|
| 730 | + switch (CUR_SIZE(c->vc_cursor_type)) { |
---|
745 | 731 | case CUR_BLOCK: from = 1; |
---|
746 | 732 | to = c->vc_font.height; |
---|
747 | 733 | break; |
---|
.. | .. |
---|
796 | 782 | switch (dir) { |
---|
797 | 783 | |
---|
798 | 784 | case SM_UP: |
---|
799 | | - sisusbcon_memmovew(SISUSB_VADDR(0, t), |
---|
800 | | - SISUSB_VADDR(0, t + lines), |
---|
| 785 | + memmove(sisusb_vaddr(sisusb, c, 0, t), |
---|
| 786 | + sisusb_vaddr(sisusb, c, 0, t + lines), |
---|
801 | 787 | (b - t - lines) * cols * 2); |
---|
802 | | - sisusbcon_memsetw(SISUSB_VADDR(0, b - lines), eattr, |
---|
803 | | - lines * cols * 2); |
---|
| 788 | + sisusbcon_memsetw(sisusb_vaddr(sisusb, c, 0, b - lines), |
---|
| 789 | + eattr, lines * cols * 2); |
---|
804 | 790 | break; |
---|
805 | 791 | |
---|
806 | 792 | case SM_DOWN: |
---|
807 | | - sisusbcon_memmovew(SISUSB_VADDR(0, t + lines), |
---|
808 | | - SISUSB_VADDR(0, t), |
---|
| 793 | + memmove(sisusb_vaddr(sisusb, c, 0, t + lines), |
---|
| 794 | + sisusb_vaddr(sisusb, c, 0, t), |
---|
809 | 795 | (b - t - lines) * cols * 2); |
---|
810 | | - sisusbcon_memsetw(SISUSB_VADDR(0, t), eattr, |
---|
| 796 | + sisusbcon_memsetw(sisusb_vaddr(sisusb, c, 0, t), eattr, |
---|
811 | 797 | lines * cols * 2); |
---|
812 | 798 | break; |
---|
813 | 799 | } |
---|
814 | 800 | |
---|
815 | | - sisusb_copy_memory(sisusb, (char *)SISUSB_VADDR(0, t), |
---|
816 | | - (long)SISUSB_HADDR(0, t), length); |
---|
| 801 | + sisusb_copy_memory(sisusb, sisusb_vaddr(sisusb, c, 0, t), |
---|
| 802 | + sisusb_haddr(sisusb, c, 0, t), length); |
---|
817 | 803 | |
---|
818 | 804 | mutex_unlock(&sisusb->lock); |
---|
819 | 805 | |
---|
.. | .. |
---|
830 | 816 | int copyall = 0; |
---|
831 | 817 | unsigned long oldorigin; |
---|
832 | 818 | unsigned int delta = lines * c->vc_size_row; |
---|
833 | | - u32 originoffset; |
---|
834 | 819 | |
---|
835 | 820 | /* Returning != 0 means we have done the scrolling successfully. |
---|
836 | 821 | * Returning 0 makes vt do the scrolling on its own. |
---|
.. | .. |
---|
874 | 859 | |
---|
875 | 860 | if (c->vc_scr_end + delta >= |
---|
876 | 861 | sisusb->scrbuf + sisusb->scrbuf_size) { |
---|
877 | | - sisusbcon_memcpyw((u16 *)sisusb->scrbuf, |
---|
| 862 | + memcpy((u16 *)sisusb->scrbuf, |
---|
878 | 863 | (u16 *)(oldorigin + delta), |
---|
879 | 864 | c->vc_screenbuf_size - delta); |
---|
880 | 865 | c->vc_origin = sisusb->scrbuf; |
---|
.. | .. |
---|
892 | 877 | case SM_DOWN: |
---|
893 | 878 | |
---|
894 | 879 | if (oldorigin - delta < sisusb->scrbuf) { |
---|
895 | | - sisusbcon_memmovew((u16 *)(sisusb->scrbuf + |
---|
896 | | - sisusb->scrbuf_size - |
---|
897 | | - c->vc_screenbuf_size + |
---|
898 | | - delta), |
---|
899 | | - (u16 *)oldorigin, |
---|
900 | | - c->vc_screenbuf_size - delta); |
---|
| 880 | + memmove((void *)sisusb->scrbuf + sisusb->scrbuf_size - |
---|
| 881 | + c->vc_screenbuf_size + delta, |
---|
| 882 | + (u16 *)oldorigin, |
---|
| 883 | + c->vc_screenbuf_size - delta); |
---|
901 | 884 | c->vc_origin = sisusb->scrbuf + |
---|
902 | 885 | sisusb->scrbuf_size - |
---|
903 | 886 | c->vc_screenbuf_size; |
---|
.. | .. |
---|
913 | 896 | break; |
---|
914 | 897 | } |
---|
915 | 898 | |
---|
916 | | - originoffset = (u32)(c->vc_origin - sisusb->scrbuf); |
---|
917 | | - |
---|
918 | 899 | if (copyall) |
---|
919 | 900 | sisusb_copy_memory(sisusb, |
---|
920 | | - (char *)c->vc_origin, |
---|
921 | | - (u32)(sisusb->vrambase + originoffset), |
---|
| 901 | + (u8 *)c->vc_origin, |
---|
| 902 | + sisusb_haddr(sisusb, c, 0, 0), |
---|
922 | 903 | c->vc_screenbuf_size); |
---|
923 | 904 | else if (dir == SM_UP) |
---|
924 | 905 | sisusb_copy_memory(sisusb, |
---|
925 | | - (char *)c->vc_origin + c->vc_screenbuf_size - delta, |
---|
926 | | - (u32)sisusb->vrambase + originoffset + |
---|
| 906 | + (u8 *)c->vc_origin + c->vc_screenbuf_size - delta, |
---|
| 907 | + sisusb_haddr(sisusb, c, 0, 0) + |
---|
927 | 908 | c->vc_screenbuf_size - delta, |
---|
928 | 909 | delta); |
---|
929 | 910 | else |
---|
930 | 911 | sisusb_copy_memory(sisusb, |
---|
931 | | - (char *)c->vc_origin, |
---|
932 | | - (u32)(sisusb->vrambase + originoffset), |
---|
| 912 | + (u8 *)c->vc_origin, |
---|
| 913 | + sisusb_haddr(sisusb, c, 0, 0), |
---|
933 | 914 | delta); |
---|
934 | 915 | |
---|
935 | 916 | c->vc_scr_end = c->vc_origin + c->vc_screenbuf_size; |
---|
.. | .. |
---|
1246 | 1227 | sisusb->font_backup = vmalloc(array_size(charcount, 32)); |
---|
1247 | 1228 | |
---|
1248 | 1229 | if (sisusb->font_backup) { |
---|
1249 | | - memcpy(sisusb->font_backup, font->data, charcount * 32); |
---|
| 1230 | + memcpy(sisusb->font_backup, font->data, array_size(charcount, 32)); |
---|
1250 | 1231 | sisusb->font_backup_size = charcount; |
---|
1251 | 1232 | sisusb->font_backup_height = font->height; |
---|
1252 | 1233 | sisusb->font_backup_512 = (charcount == 512) ? 1 : 0; |
---|
.. | .. |
---|
1534 | 1515 | for (i = 0; i < MAX_NR_CONSOLES; i++) |
---|
1535 | 1516 | mysisusbs[i] = NULL; |
---|
1536 | 1517 | } |
---|
1537 | | - |
---|
1538 | | -#endif /* INCL_CON */ |
---|
1539 | | - |
---|
1540 | | - |
---|
1541 | | - |
---|