Home | History | Annotate | Download | only in vesa
      1 /* ----------------------------------------------------------------------- *
      2  *
      3  *   Copyright 2006-2008 H. Peter Anvin - All Rights Reserved
      4  *
      5  *   Permission is hereby granted, free of charge, to any person
      6  *   obtaining a copy of this software and associated documentation
      7  *   files (the "Software"), to deal in the Software without
      8  *   restriction, including without limitation the rights to use,
      9  *   copy, modify, merge, publish, distribute, sublicense, and/or
     10  *   sell copies of the Software, and to permit persons to whom
     11  *   the Software is furnished to do so, subject to the following
     12  *   conditions:
     13  *
     14  *   The above copyright notice and this permission notice shall
     15  *   be included in all copies or substantial portions of the Software.
     16  *
     17  *   THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
     18  *   EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
     19  *   OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
     20  *   NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
     21  *   HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
     22  *   WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
     23  *   FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
     24  *   OTHER DEALINGS IN THE SOFTWARE.
     25  *
     26  * ----------------------------------------------------------------------- */
     27 
     28 #ifndef LIB_SYS_VESA_FILL_H
     29 #define LIB_SYS_VESA_FILL_H
     30 
     31 #include "video.h"
     32 
     33 /* Fill a number of characters. */
     34 static inline struct vesa_char *vesacon_fill(struct vesa_char *ptr,
     35 					     struct vesa_char fill,
     36 					     unsigned int count)
     37 {
     38     switch (sizeof(struct vesa_char)) {
     39     case 1:
     40 	asm volatile ("rep; stosb":"+D" (ptr), "+c"(count)
     41 		      :"a"(fill)
     42 		      :"memory");
     43 	break;
     44     case 2:
     45 	asm volatile ("rep; stosw":"+D" (ptr), "+c"(count)
     46 		      :"a"(fill)
     47 		      :"memory");
     48 	break;
     49     case 4:
     50 	asm volatile ("rep; stosl":"+D" (ptr), "+c"(count)
     51 		      :"a"(fill)
     52 		      :"memory");
     53 	break;
     54     default:
     55 	while (count--)
     56 	    *ptr++ = fill;
     57 	break;
     58     }
     59 
     60     return ptr;
     61 }
     62 
     63 #endif /* LIB_SYS_VESA_FILL_H */
     64