static struct chromeos_vbc *chromeos_vbc_ptr;
-static int vbc_read(u8 *buf, int buf_size);
static int vbc_write_byte(unsigned offset, u8 value);
/* the following defines are copied from
return (u8)(crc >> 8);
}
+int chromeos_vbc_write(const u8 *buf, ssize_t size)
+{
+ return chromeos_vbc_ptr->write(buf, size);
+}
+
static int vbc_write_byte(unsigned offset, u8 value)
{
u8 buf[MAX_VBOOT_CONTEXT_BUFFER_SIZE];
if (!chromeos_vbc_ptr)
return -ENOSYS;
- size = vbc_read(buf, sizeof(buf));
+ size = chromeos_vbc_read(buf, sizeof(buf));
if (size <= 0)
return -EINVAL;
* of bytes in the vboot context buffer, -1 on any error (uninitialized
* subsystem, corrupted crc8 value, not enough room in the buffer, etc.).
*/
-static int vbc_read(u8 *buf, int buf_size)
+int chromeos_vbc_read(u8 *buf, int buf_size)
{
ssize_t size;
struct device_attribute *attr,
const char *buf, size_t count)
{
- int err;
- err = chromeos_set_dev_usb();
- if (err)
- return err;
- return count;
+ int err;
+ err = chromeos_set_dev_usb();
+ if (err)
+ return err;
+ return count;
+}
+
+static ssize_t ec_vbnv_store(struct device *dev,
+ struct device_attribute *attr,
+ const char *buf, size_t count)
+{
+ return chromeos_vbc_write(buf, count);
+}
+
+static ssize_t ec_vbnv_show(struct device *dev,
+ struct device_attribute *attr,
+ char *buf)
+{
+ return chromeos_vbc_read(buf, 16);
}
static DEVICE_ATTR(fw_version, S_IRUGO, ec_fw_version_show, NULL);
static DEVICE_ATTR(build_info, S_IRUGO, ec_build_info_show, NULL);
static DEVICE_ATTR(chip_info, S_IRUGO, ec_chip_info_show, NULL);
static DEVICE_ATTR(dev_usb, S_IWUGO, NULL, ec_dev_usb_store);
+static DEVICE_ATTR(vbnv, S_IRUGO | S_IWUGO, ec_vbnv_show, ec_vbnv_store);
static struct attribute *ec_fw_attrs[] = {
&dev_attr_fw_version.attr,
&dev_attr_build_info.attr,
&dev_attr_chip_info.attr,
&dev_attr_dev_usb.attr,
+ &dev_attr_vbnv.attr,
NULL
};
*/
extern int chromeos_set_need_recovery(void);
extern int chromeos_set_dev_usb(void);
+int chromeos_vbc_read(u8 *buf, int buf_size);
+int chromeos_vbc_write(const u8 *buf, int buf_size);
#else
{
return -ENODEV;
}
+static inline int chromeos_vbc_read(u8 *buf, int buf_size)
+{
+ return -ENODEV;
+}
+
+static inline int chromeos_vbc_write(const u8 *buf, int buf_size)
+{
+ return -ENODEV;
+}
+
#endif /* CONFIG_CHROMEOS */
#endif /* _LINUX_CHROMEOS_PLATFORM_H */