Lines Matching full:data
56 static int salinfo_read(char *page, char **start, off_t off, int count, int *eof, void *data);
87 (2 * ARRAY_SIZE(salinfo_log_name)) + /* /proc/sal/mca/{event,data} */
90 /* Some records we get ourselves, some are accessed as saved data in buffers
101 * Write "read <cpunum>" to the data file.
102 * Write "clear <cpunum>" to the data file.
103 * Write "oemdata <cpunum> <offset> to the data file.
104 * Read from the data file.
105 * Close the data file.
113 * read data -> return EOF.
119 * write "oemdata <cpunum> <offset> -> format the oem data, goto OEMDATA.
120 * read data -> return the INIT/MCA/CMC/CPE record.
126 * write "oemdata <cpunum> <offset> -> format the oem data, goto OEMDATA.
127 * read data -> return the formatted oemdata.
130 * Closing the data file does not change the state. This allows shell scripts
131 * to manipulate salinfo data, each shell redirection opens the file, does one
146 u8 *oemdata; /* decoded oem data */
168 * Description: If user space asks for oem data to be decoded by the kernel
193 salinfo_work_to_do(struct salinfo_data *data) in salinfo_work_to_do() argument
195 (void)(down_trylock(&data->mutex) ?: 0); in salinfo_work_to_do()
196 up(&data->mutex); in salinfo_work_to_do()
207 shift1_data_saved (struct salinfo_data *data, int shift) in shift1_data_saved() argument
209 memcpy(data->data_saved+shift, data->data_saved+shift+1, in shift1_data_saved()
210 (ARRAY_SIZE(data->data_saved) - (shift+1)) * sizeof(data->data_saved[0])); in shift1_data_saved()
211 memset(data->data_saved + ARRAY_SIZE(data->data_saved) - 1, 0, in shift1_data_saved()
212 sizeof(data->data_saved[0])); in shift1_data_saved()
229 struct salinfo_data *data = salinfo_data + type; in salinfo_log_wakeup() local
233 int saved_size = ARRAY_SIZE(data->data_saved); in salinfo_log_wakeup()
240 for (i = 0, data_saved = data->data_saved; i < saved_size; ++i, ++data_saved) { in salinfo_log_wakeup()
245 if (!data->saved_num) { in salinfo_log_wakeup()
246 shift1_data_saved(data, 0); in salinfo_log_wakeup()
247 data_saved = data->data_saved + saved_size - 1; in salinfo_log_wakeup()
258 cpu_set(smp_processor_id(), data->cpu_event); in salinfo_log_wakeup()
260 salinfo_work_to_do(data); in salinfo_log_wakeup()
271 salinfo_timeout_check(struct salinfo_data *data) in salinfo_timeout_check() argument
274 if (!data->open) in salinfo_timeout_check()
276 if (!cpus_empty(data->cpu_event)) { in salinfo_timeout_check()
278 salinfo_work_to_do(data); in salinfo_timeout_check()
306 struct salinfo_data *data = entry->data; in salinfo_event_read() local
312 if (cpus_empty(data->cpu_event) && down_trylock(&data->mutex)) { in salinfo_event_read()
315 if (down_interruptible(&data->mutex)) in salinfo_event_read()
319 n = data->cpu_check; in salinfo_event_read()
321 if (cpu_isset(n, data->cpu_event)) { in salinfo_event_read()
323 cpu_clear(n, data->cpu_event); in salinfo_event_read()
339 data->cpu_check = cpu; in salinfo_event_read()
340 if (++data->cpu_check == nr_cpu_ids) in salinfo_event_read()
341 data->cpu_check = 0; in salinfo_event_read()
364 struct salinfo_data *data = entry->data; in salinfo_log_open() local
370 if (data->open) { in salinfo_log_open()
374 data->open = 1; in salinfo_log_open()
377 if (data->state == STATE_NO_DATA && in salinfo_log_open()
378 !(data->log_buffer = vmalloc(ia64_sal_get_state_info_size(data->type)))) { in salinfo_log_open()
379 data->open = 0; in salinfo_log_open()
390 struct salinfo_data *data = entry->data; in salinfo_log_release() local
392 if (data->state == STATE_NO_DATA) { in salinfo_log_release()
393 vfree(data->log_buffer); in salinfo_log_release()
394 vfree(data->oemdata); in salinfo_log_release()
395 data->log_buffer = NULL; in salinfo_log_release()
396 data->oemdata = NULL; in salinfo_log_release()
399 data->open = 0; in salinfo_log_release()
416 struct salinfo_data *data = context; in salinfo_log_read_cpu() local
418 data->log_size = ia64_sal_get_state_info(data->type, (u64 *) data->log_buffer); in salinfo_log_read_cpu()
419 rh = (sal_log_record_header_t *)(data->log_buffer); in salinfo_log_read_cpu()
422 ia64_sal_clear_state_info(data->type); in salinfo_log_read_cpu()
426 salinfo_log_new_read(int cpu, struct salinfo_data *data) in salinfo_log_new_read() argument
431 int saved_size = ARRAY_SIZE(data->data_saved); in salinfo_log_new_read()
433 data->saved_num = 0; in salinfo_log_new_read()
436 for (i = 0, data_saved = data->data_saved; i < saved_size; ++i, ++data_saved) { in salinfo_log_new_read()
439 data->log_size = data_saved->size; in salinfo_log_new_read()
440 memcpy(data->log_buffer, rh, data->log_size); in salinfo_log_new_read()
443 data->saved_num = i+1; in salinfo_log_new_read()
447 shift1_data_saved(data, i); in salinfo_log_new_read()
453 if (!data->saved_num) in salinfo_log_new_read()
454 call_on_cpu(cpu, salinfo_log_read_cpu, data); in salinfo_log_new_read()
455 if (!data->log_size) { in salinfo_log_new_read()
456 data->state = STATE_NO_DATA; in salinfo_log_new_read()
457 cpu_clear(cpu, data->cpu_event); in salinfo_log_new_read()
459 data->state = STATE_LOG_RECORD; in salinfo_log_new_read()
468 struct salinfo_data *data = entry->data; in salinfo_log_read() local
472 if (data->state == STATE_LOG_RECORD) { in salinfo_log_read()
473 buf = data->log_buffer; in salinfo_log_read()
474 bufsize = data->log_size; in salinfo_log_read()
475 } else if (data->state == STATE_OEMDATA) { in salinfo_log_read()
476 buf = data->oemdata; in salinfo_log_read()
477 bufsize = data->oemdata_size; in salinfo_log_read()
488 struct salinfo_data *data = context; in salinfo_log_clear_cpu() local
489 ia64_sal_clear_state_info(data->type); in salinfo_log_clear_cpu()
493 salinfo_log_clear(struct salinfo_data *data, int cpu) in salinfo_log_clear() argument
498 data->state = STATE_NO_DATA; in salinfo_log_clear()
499 if (!cpu_isset(cpu, data->cpu_event)) { in salinfo_log_clear()
503 cpu_clear(cpu, data->cpu_event); in salinfo_log_clear()
504 if (data->saved_num) { in salinfo_log_clear()
505 shift1_data_saved(data, data->saved_num - 1); in salinfo_log_clear()
506 data->saved_num = 0; in salinfo_log_clear()
509 rh = (sal_log_record_header_t *)(data->log_buffer); in salinfo_log_clear()
512 call_on_cpu(cpu, salinfo_log_clear_cpu, data); in salinfo_log_clear()
514 salinfo_log_new_read(cpu, data); in salinfo_log_clear()
515 if (data->state == STATE_LOG_RECORD) { in salinfo_log_clear()
517 cpu_set(cpu, data->cpu_event); in salinfo_log_clear()
518 salinfo_work_to_do(data); in salinfo_log_clear()
529 struct salinfo_data *data = entry->data; in salinfo_log_write() local
542 salinfo_log_new_read(cpu, data); in salinfo_log_write()
545 if ((ret = salinfo_log_clear(data, cpu))) in salinfo_log_write()
548 if (data->state != STATE_LOG_RECORD && data->state != STATE_OEMDATA) in salinfo_log_write()
550 if (offset > data->log_size - sizeof(efi_guid_t)) in salinfo_log_write()
552 data->state = STATE_OEMDATA; in salinfo_log_write()
555 .efi_guid = data->log_buffer + offset, in salinfo_log_write()
556 .oemdata = &data->oemdata, in salinfo_log_write()
557 .oemdata_size = &data->oemdata_size in salinfo_log_write()
563 data->oemdata_size = 0; in salinfo_log_write()
583 struct salinfo_data *data; in salinfo_cpu_callback() local
588 for (i = 0, data = salinfo_data; in salinfo_cpu_callback()
590 ++i, ++data) { in salinfo_cpu_callback()
591 cpu_set(cpu, data->cpu_event); in salinfo_cpu_callback()
592 salinfo_work_to_do(data); in salinfo_cpu_callback()
599 for (i = 0, data = salinfo_data; in salinfo_cpu_callback()
601 ++i, ++data) { in salinfo_cpu_callback()
604 for (j = ARRAY_SIZE(data->data_saved) - 1, data_saved = data->data_saved + j; in salinfo_cpu_callback()
608 shift1_data_saved(data, j); in salinfo_cpu_callback()
611 cpu_clear(cpu, data->cpu_event); in salinfo_cpu_callback()
631 struct salinfo_data *data; in salinfo_init() local
639 /* pass the feature bit in question as misc data */ in salinfo_init()
645 data = salinfo_data + i; in salinfo_init()
646 data->type = i; in salinfo_init()
647 sema_init(&data->mutex, 1); in salinfo_init()
653 &salinfo_event_fops, data); in salinfo_init()
658 entry = proc_create_data("data", S_IRUSR | S_IWUSR, dir, in salinfo_init()
659 &salinfo_data_fops, data); in salinfo_init()
666 cpu_set(j, data->cpu_event); in salinfo_init()
684 * 'data' contains an integer that corresponds to the feature we're
688 salinfo_read(char *page, char **start, off_t off, int count, int *eof, void *data) in salinfo_read() argument
692 len = sprintf(page, (sal_platform_features & (unsigned long)data) ? "1\n" : "0\n"); in salinfo_read()