|
@@ -699,6 +699,37 @@ static AvbIOResult get_unique_guid_for_partition(AvbOps *ops,
|
|
|
return AVB_IO_RESULT_OK;
|
|
|
}
|
|
|
|
|
|
+/**
|
|
|
+ * get_size_of_partition() - gets the size of a partition identified
|
|
|
+ * by a string name
|
|
|
+ *
|
|
|
+ * @ops: contains AVB ops handlers
|
|
|
+ * @partition: partition name (NUL-terminated UTF-8 string)
|
|
|
+ * @out_size_num_bytes: returns the value of a partition size
|
|
|
+ *
|
|
|
+ * @return:
|
|
|
+ * AVB_IO_RESULT_OK, on success (GUID found)
|
|
|
+ * AVB_IO_RESULT_ERROR_INSUFFICIENT_SPACE, out_size_num_bytes is NULL
|
|
|
+ * AVB_IO_RESULT_ERROR_NO_SUCH_PARTITION, if partition was not found
|
|
|
+ */
|
|
|
+static AvbIOResult get_size_of_partition(AvbOps *ops,
|
|
|
+ const char *partition,
|
|
|
+ u64 *out_size_num_bytes)
|
|
|
+{
|
|
|
+ struct mmc_part *part;
|
|
|
+
|
|
|
+ if (!out_size_num_bytes)
|
|
|
+ return AVB_IO_RESULT_ERROR_INSUFFICIENT_SPACE;
|
|
|
+
|
|
|
+ part = get_partition(ops, partition);
|
|
|
+ if (!part)
|
|
|
+ return AVB_IO_RESULT_ERROR_NO_SUCH_PARTITION;
|
|
|
+
|
|
|
+ *out_size_num_bytes = part->info.blksz * part->info.size;
|
|
|
+
|
|
|
+ return AVB_IO_RESULT_OK;
|
|
|
+}
|
|
|
+
|
|
|
/**
|
|
|
* ============================================================================
|
|
|
* AVB2.0 AvbOps alloc/initialisation/free
|
|
@@ -722,7 +753,7 @@ AvbOps *avb_ops_alloc(int boot_device)
|
|
|
ops_data->ops.read_is_device_unlocked = read_is_device_unlocked;
|
|
|
ops_data->ops.get_unique_guid_for_partition =
|
|
|
get_unique_guid_for_partition;
|
|
|
-
|
|
|
+ ops_data->ops.get_size_of_partition = get_size_of_partition;
|
|
|
ops_data->mmc_dev = boot_device;
|
|
|
|
|
|
return &ops_data->ops;
|