? 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__ */