socsvn commit: r269453 - soc2014/seiya/bootsplash/sys/dev/fb

seiya at FreeBSD.org seiya at FreeBSD.org
Thu Jun 12 14:50:05 UTC 2014


Author: seiya
Date: Thu Jun 12 14:50:04 2014
New Revision: 269453
URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=269453

Log:
  use pause() instead of timeout()
  
  In man page of timeout, it says that timeout() is old style so I replaced it by
  kthread and pause().

Modified:
  soc2014/seiya/bootsplash/sys/dev/fb/bsplash.c

Modified: soc2014/seiya/bootsplash/sys/dev/fb/bsplash.c
==============================================================================
--- soc2014/seiya/bootsplash/sys/dev/fb/bsplash.c	Thu Jun 12 13:59:14 2014	(r269452)
+++ soc2014/seiya/bootsplash/sys/dev/fb/bsplash.c	Thu Jun 12 14:50:04 2014	(r269453)
@@ -34,6 +34,7 @@
 #include <sys/libkern.h>
 #include <sys/systm.h>
 #include <sys/param.h>
+#include <sys/kthread.h>
 
 #include <dev/fb/bmp.h>
 #include <dev/fb/bsplash.h>
@@ -55,7 +56,6 @@
 	return 0;
 }
 
-
 static int
 bsplash_early_init2(void)
 {
@@ -85,33 +85,41 @@
 
 	if (draw_bmp(adp, &bmp_info, 0, 1024, 768) != 0){
 		printf("bsplash: failed to draw BMP\n");
+                return 1;
+        }
+
+	if (kthread_add(update_animation, NULL, NULL, NULL, 0, 0, "bsplash") != 0){
+		printf("bsplash: failed to start kernel thread 'update_animation()'\n");
+		vidd_set_mode(adp, M_TEXT_80x25);
 		return 1;
 	}
 
-	timeout(update_animation, NULL, 1);
-
 	return 0;
 }
 
 static void
 update_animation(void *unused)
 {
-	static int count = 0;
+	static int	count = 0;
 	static int	y = 0;
 
-	if (draw_bmp(adp, &bmp_info, y, 1024, 768) == 0){
-		y += 768;
-	}else{
-		y = 0;
-		draw_bmp(adp, &bmp_info, y, 1024, 768); /* try again */
-	}
+	for (;;){
+		if (draw_bmp(adp, &bmp_info, y, 1024, 768) == 0){
+			y += 768;
+		}else{
+			y = 0;
+			if(draw_bmp(adp, &bmp_info, y, 1024, 768) == 0) /* try again */
+				y += 768;
+		}
+
+		/* FIXME */
+		if (count > 50){
+			vidd_set_mode(adp, M_TEXT_80x25);
+			kthread_exit();
+		}
 
-	/* FIXME */
-	if (count > 40){
-		vidd_set_mode(adp, M_TEXT_80x25);
-	}else{
 		count++;
-		timeout(update_animation, NULL, 1);
+		pause("bsplash", 15);
 	}
 }
 


More information about the svn-soc-all mailing list