19 #include <linux/sched.h>
20 #include <linux/slab.h>
21 #include <asm/byteorder.h>
23 #include <asm/unaligned.h>
40 scdrv_event_interrupt(
int irq,
void *subch_data)
50 tasklet_schedule(&sn_sysctl_event);
52 spin_unlock_irqrestore(&sd->
sd_rlock, flags);
64 scdrv_parse_event(
char *
event,
int *
src,
int *
code,
int *esp_code,
char *
desc)
97 desc_end = desc +
sprintf(desc,
"%s", event);
101 (desc_end != desc) && ((*desc_end == 0xd) || (*desc_end == 0xa));
117 scdrv_event_severity(
int code)
125 switch (ev_severity) {
137 switch (ev_severity) {
147 switch (ev_severity) {
185 scdrv_dispatch_event(
char *event,
int len)
187 static int snsc_shutting_down = 0;
188 int code, esp_code,
src,
class;
192 if (scdrv_parse_event(event, &src, &code, &esp_code, desc) < 0) {
198 severity = scdrv_event_severity(code);
203 if (snsc_shutting_down)
206 snsc_shutting_down = 1;
211 " Sending SIGPWR to init...\n");
214 " due to a critical environmental condition."
215 " Sending SIGPWR to init...\n");
221 printk(
"%s|$(0x%x)%s\n", severity, esp_code, desc);
248 while (!(status < 0)) {
249 spin_unlock_irqrestore(&sd->
sd_rlock, flags);
250 scdrv_dispatch_event(sd->
sd_rb, len);
256 spin_unlock_irqrestore(&sd->
sd_rlock, flags);
273 if (event_sd ==
NULL) {
275 " for event monitoring\n", __func__);
296 "system controller events", event_sd);