/** * pdcs_diagnostic_read - Stable Storage Diagnostic register output. * @buf: The output buffer to write to. * * I have NFC how to interpret the content of that register ;-). */ static ssize_t pdcs_diagnostic_read(struct kobject *kobj, struct kobj_attribute *attr, char *buf) { char *out = buf; u32 result; if (!buf) return -EINVAL; /* get diagnostic */ if (pdc_stable_read(PDCS_ADDR_DIAG, &result, sizeof(result)) != PDC_OK) return -EIO; out += sprintf(out, "0x%.4x\n", (result >> 16)); return out - buf; }
/** * pdcs_osdep1_read - Stable Storage OS-Dependent data area 1 output. * @buf: The output buffer to write to. * * This can hold 16 bytes of OS-Dependent data. */ static ssize_t pdcs_osdep1_read(struct kobject *kobj, struct kobj_attribute *attr, char *buf) { char *out = buf; u32 result[4]; if (!buf) return -EINVAL; if (pdc_stable_read(PDCS_ADDR_OSD1, &result, sizeof(result)) != PDC_OK) return -EIO; out += sprintf(out, "0x%.8x\n", result[0]); out += sprintf(out, "0x%.8x\n", result[1]); out += sprintf(out, "0x%.8x\n", result[2]); out += sprintf(out, "0x%.8x\n", result[3]); return out - buf; }
/** * pdcs_fastsize_read - Stable Storage FastSize register output. * @buf: The output buffer to write to. * * This register holds the amount of system RAM to be tested during boot sequence. */ static ssize_t pdcs_fastsize_read(struct kobject *kobj, struct kobj_attribute *attr, char *buf) { char *out = buf; u32 result; if (!buf) return -EINVAL; /* get fast-size */ if (pdc_stable_read(PDCS_ADDR_FSIZ, &result, sizeof(result)) != PDC_OK) return -EIO; if ((result & 0x0F) < 0x0E) out += sprintf(out, "%d kB", (1<<(result & 0x0F))*256); else out += sprintf(out, "All"); out += sprintf(out, "\n"); return out - buf; }
/** * pdcs_fastsize_read - Stable Storage FastSize register output. * @entry: An allocated and populated subsytem struct. We don't use it tho. * @buf: The output buffer to write to. * * This register holds the amount of system RAM to be tested during boot sequence. */ static ssize_t pdcs_fastsize_read(struct subsystem *entry, char *buf) { char *out = buf; __u32 result; if (!entry || !buf) return -EINVAL; /* get fast-size */ if (pdc_stable_read(PDCS_ADDR_FSIZ, &result, sizeof(result)) != PDC_OK) return -EIO; if ((result & 0x0F) < 0x0E) out += sprintf(out, "%d kB", (1<<(result & 0x0F))*256); else out += sprintf(out, "All"); out += sprintf(out, "\n"); return out - buf; }