? src/sys/arch/shark/shark/shark_led.c
Index: src/sys/arch/shark/conf/GENERIC
===================================================================
RCS file: /cvsroot/src/sys/arch/shark/conf/GENERIC,v
retrieving revision 1.140
diff -u -r1.140 GENERIC
--- src/sys/arch/shark/conf/GENERIC	30 Apr 2021 02:24:05 -0000	1.140
+++ src/sys/arch/shark/conf/GENERIC	2 May 2021 19:08:01 -0000
@@ -216,8 +216,11 @@
 iic*		at sharkiic?
 
 # Only 2 DIMM slots in a Shark.
-spdmem*        at iic? addr 0x50
-spdmem*        at iic? addr 0x51
+spdmem* 	at iic? addr 0x50
+spdmem* 	at iic? addr 0x51
+
+# Front and debug LED's
+sharkled* 	at sequoia?
 
 # IDE/ATA disk
 wdc*		at ofisa?
Index: src/sys/arch/shark/conf/files.shark
===================================================================
RCS file: /cvsroot/src/sys/arch/shark/conf/files.shark,v
retrieving revision 1.24
diff -u -r1.24 files.shark
--- src/sys/arch/shark/conf/files.shark	30 Apr 2021 02:24:05 -0000	1.24
+++ src/sys/arch/shark/conf/files.shark	2 May 2021 19:08:01 -0000
@@ -65,6 +65,11 @@
 attach	sharkiic at sequoia
 file	arch/shark/shark/shark_iic.c		sharkiic
 
+# User control for Shark LED's
+device	sharkled: leds
+attach	sharkled at sequoia
+file	arch/shark/shark/shark_led.c		sharkled
+
 # Glue for OFW ISA device attachment
 device	ofisascr {}
 attach	ofisascr at ofisa
Index: src/sys/arch/shark/shark/sequoia.c
===================================================================
RCS file: /cvsroot/src/sys/arch/shark/shark/sequoia.c,v
retrieving revision 1.15
diff -u -r1.15 sequoia.c
--- src/sys/arch/shark/shark/sequoia.c	30 Apr 2021 02:11:37 -0000	1.15
+++ src/sys/arch/shark/shark/sequoia.c	2 May 2021 19:08:01 -0000
@@ -109,13 +109,6 @@
 #define LED_DEBUG_GREEN_BIT     FOMPCR_M_PCON8
 
 
-/* define biled colors */
-#define  LED_BILED_NONE     0
-#define  LED_BILED_GREEN    1
-#define  LED_BILED_YELLOW   2
-#define  LED_BILED_RED      3
-
-    
 #define LED_TIMEOUT    hz / 20                       /* 20 times a second */
 #define LED_NET_ACTIVE (1000000/hz) * LED_TIMEOUT   /* delay in us for net activity */
       
@@ -130,7 +123,8 @@
 static bus_space_handle_t sequoia_ioh;
 
 static struct timeval ledLastActive;      /* last time we get net activity */
-static int      ledColor;           /* present color of led */
+static int      ledColor;           /* present color of front led */
+static int      debugColor;         /* present color of debug led */
 static int      ledBlockCount;      /* reference count of block calles */                            
 int sequoia_index_cache = -1;       /* set to silly value so that we dont cache on init */
 
@@ -144,7 +138,6 @@
 ** FUNCITONAL PROTOTYPES
 **
 */
-static void ledSetBiled(int color);
 static void ledTimeout(void *arg);
 
 /*
@@ -195,6 +188,8 @@
     CLR(seqReg,LED_DEBUG_GREEN_BIT);
     sequoiaWrite(PMC_FOMPCR_REG, seqReg);
 
+    ledColor = LED_BILED_RED;
+    debugColor = LED_DEBUG_STATE_1;
 
     /* 
     ** 
@@ -264,6 +259,7 @@
 
     /* setup the biled info */
     ledColor = LED_BILED_GREEN;
+    ledSetBiled(ledColor);
     ledLastActive.tv_usec = 0;
     ledLastActive.tv_sec = 0;
     ledBlockCount = 0;
@@ -530,13 +526,13 @@
     /* check if we are blocked */
     if(ledBlockCount)
     {
-        if(ledColor == LED_BILED_YELLOW)
+        if(ledColor & LED_BILED_YELLOW)
         {
-            ledSetBiled(LED_BILED_NONE);
+            ledSetBiled(LED_BILED_YELLOW_OFF);
         }
         else
         {
-            ledSetBiled(LED_BILED_YELLOW);
+            ledSetBiled(LED_BILED_YELLOW_ON);
         }
     }
 
@@ -544,22 +540,22 @@
     /* check if we have network activity */
     else if (timeSpan < LED_NET_ACTIVE)
     {
-        if(ledColor == LED_BILED_GREEN)
+        if(ledColor & LED_BILED_GREEN)
         {
-            ledSetBiled(LED_BILED_NONE);
+            ledSetBiled(LED_BILED_GREEN_OFF);
         }
         else
         {
-            ledSetBiled(LED_BILED_GREEN);
+            ledSetBiled(LED_BILED_GREEN_ON);
         }
     }
 
     /* normal operating mode */        
     else
     {
-        if(ledColor != LED_BILED_GREEN)
+        if(!(ledColor & LED_BILED_GREEN))
         {
-            ledSetBiled(LED_BILED_GREEN);
+            ledSetBiled(LED_BILED_GREEN_ON);
         }
     }
 
@@ -569,13 +565,12 @@
 }
 
 
-static void ledSetBiled(int color)
+void ledSetBiled(int color)
 {
     u_int16_t  seqReg;
 
     sequoiaLock();
 
-    ledColor = color;
 
     sequoiaRead (PMC_FOMPCR_REG, &seqReg);
     switch(color)
@@ -583,21 +578,45 @@
         case LED_BILED_NONE:
             SET(seqReg,LED_BILED_YELLOW_BIT);
             SET(seqReg,LED_BILED_GREEN_BIT);
+            ledColor = color;
             break;
     
         case LED_BILED_YELLOW:
             CLR(seqReg,LED_BILED_YELLOW_BIT);
             SET(seqReg,LED_BILED_GREEN_BIT);
+            ledColor = color;
             break;
     
         case LED_BILED_GREEN:
             SET(seqReg,LED_BILED_YELLOW_BIT);
             CLR(seqReg,LED_BILED_GREEN_BIT);
+            ledColor = color;
             break;
     
         case LED_BILED_RED:
             CLR(seqReg,LED_BILED_YELLOW_BIT);
             CLR(seqReg,LED_BILED_GREEN_BIT);
+            ledColor = color;
+            break;
+    
+        case LED_BILED_YELLOW_ON:
+            CLR(seqReg,LED_BILED_YELLOW_BIT);
+            ledColor |= LED_BILED_YELLOW;
+            break;
+    
+        case LED_BILED_YELLOW_OFF:
+            SET(seqReg,LED_BILED_YELLOW_BIT);
+            ledColor &= ~LED_BILED_YELLOW;
+            break;
+    
+        case LED_BILED_GREEN_ON:
+            CLR(seqReg,LED_BILED_GREEN_BIT);
+            ledColor |= LED_BILED_GREEN;
+            break;
+    
+        case LED_BILED_GREEN_OFF:
+            SET(seqReg,LED_BILED_GREEN_BIT);
+            ledColor &= ~LED_BILED_GREEN;
             break;
     
         default:
@@ -609,6 +628,11 @@
     sequoiaUnlock();
 }
 
+int ledGetBiled(void)
+{
+    return ledColor;
+}
+
 
 int hwGetRev(void)
 {
@@ -686,37 +710,45 @@
         case LED_DEBUG_STATE_0:    
             CLR(seqReg,LED_DEBUG_YELLOW_BIT);
             CLR(seqReg,LED_DEBUG_GREEN_BIT);
+            debugColor = LED_DEBUG_STATE_0;
             break;
 
         case LED_DEBUG_STATE_1:
             SET(seqReg,LED_DEBUG_YELLOW_BIT);
             CLR(seqReg,LED_DEBUG_GREEN_BIT);
+            debugColor = LED_DEBUG_STATE_1;
             break;
 
         case LED_DEBUG_STATE_2:
             CLR(seqReg,LED_DEBUG_YELLOW_BIT);
             SET(seqReg,LED_DEBUG_GREEN_BIT);
+            debugColor = LED_DEBUG_STATE_2;
             break;
 
         case LED_DEBUG_STATE_3:
             SET(seqReg,LED_DEBUG_YELLOW_BIT);
             SET(seqReg,LED_DEBUG_GREEN_BIT);
+            debugColor = LED_DEBUG_STATE_3;
             break;
 
         case LED_DEBUG_YELLOW_ON:
             SET(seqReg,LED_DEBUG_YELLOW_BIT);
+            debugColor |= LED_DEBUG_STATE_1;
             break;
 
         case LED_DEBUG_YELLOW_OFF:
             CLR(seqReg,LED_DEBUG_YELLOW_BIT);
+            debugColor &= ~LED_DEBUG_STATE_1;
             break;
 
         case LED_DEBUG_GREEN_ON:
             SET(seqReg,LED_DEBUG_GREEN_BIT);
+            debugColor |= LED_DEBUG_STATE_2;
             break;
 
         case LED_DEBUG_GREEN_OFF:
             CLR(seqReg,LED_DEBUG_GREEN_BIT);
+            debugColor &= ~LED_DEBUG_STATE_2;
             break;
 
         default:
@@ -728,6 +760,11 @@
     sequoiaUnlock();
 }
 
+int ledGetDebug(void)
+{
+    return debugColor;
+}
+
 
 int testPin=0;
 void scrToggleTestPin (void)
@@ -795,6 +832,12 @@
 	    CFARG_IATTR, "sequoia",
 	    CFARG_EOL);
 
+	/* attach the LED's */
+	strlcpy(noba.oba_ofname, "dec,dnard-led", sizeof(noba.oba_ofname));
+	config_found(self, &noba, sequoia_cfprint,
+	    CFARG_IATTR, "sequoia",
+	    CFARG_EOL);
+
 	/* attach the ofisa instance at the same OFW node */
 	config_found(self, aux, ofisaprint,
 	    CFARG_IATTR, "ofisa_subclass",
Index: src/sys/arch/shark/shark/sequoia.h
===================================================================
RCS file: /cvsroot/src/sys/arch/shark/shark/sequoia.h,v
retrieving revision 1.5
diff -u -r1.5 sequoia.h
--- src/sys/arch/shark/shark/sequoia.h	30 Apr 2021 02:11:37 -0000	1.5
+++ src/sys/arch/shark/shark/sequoia.h	2 May 2021 19:08:02 -0000
@@ -5111,8 +5111,23 @@
 #define LED_DEBUG_GREEN_OFF         6
 #define LED_DEBUG_GREEN_ON          7
 
+/* define biled colors */
+#define  LED_BILED_NONE              0
+#define  LED_BILED_GREEN             1
+#define  LED_BILED_YELLOW            2
+#define  LED_BILED_RED               3 /* Green + Yellow */
 
+#define  LED_BILED_GREEN_OFF         4
+#define  LED_BILED_GREEN_ON          5
+
+#define  LED_BILED_YELLOW_OFF        6
+#define  LED_BILED_YELLOW_ON         7
+
+
+void ledSetBiled(int color);
 void ledSetDebug(int command);
+int ledGetBiled(void);
+int ledGetDebug(void);
 
 #endif /* _LOCORE */
 #endif /* __LANGUAGE_ASM__ */