Lines Matching full:blob
122 * Internal VPD "blob" APIs for accumulating ibm,get-vpd results into
130 static bool vpd_blob_has_data(const struct vpd_blob *blob) in vpd_blob_has_data() argument
132 return blob->data && blob->len; in vpd_blob_has_data()
135 static void vpd_blob_free(const struct vpd_blob *blob) in vpd_blob_free() argument
137 if (blob) { in vpd_blob_free()
138 kvfree(blob->data); in vpd_blob_free()
139 kfree(blob); in vpd_blob_free()
145 * @blob: The blob to extend.
146 * @data: The new data to append to @blob.
152 static int vpd_blob_extend(struct vpd_blob *blob, const char *data, size_t len) in vpd_blob_extend() argument
154 const size_t new_len = blob->len + len; in vpd_blob_extend()
155 const size_t old_len = blob->len; in vpd_blob_extend()
156 const char *old_ptr = blob->data; in vpd_blob_extend()
164 blob->data = new_ptr; in vpd_blob_extend()
165 blob->len = new_len; in vpd_blob_extend()
171 * @generator: Function that supplies the blob data.
185 struct vpd_blob *blob; in vpd_blob_generate() local
190 blob = kzalloc(sizeof(*blob), GFP_KERNEL_ACCOUNT); in vpd_blob_generate()
191 if (!blob) in vpd_blob_generate()
195 err = vpd_blob_extend(blob, buf, len); in vpd_blob_generate()
197 if (err != 0 || !vpd_blob_has_data(blob)) in vpd_blob_generate()
200 return blob; in vpd_blob_generate()
202 vpd_blob_free(blob); in vpd_blob_generate()
355 const struct vpd_blob *blob; in papr_vpd_run_sequence() local
359 blob = vpd_blob_generate(vpd_sequence_fill_work_area, &seq); in papr_vpd_run_sequence()
360 if (!blob) in papr_vpd_run_sequence()
365 vpd_blob_free(blob); in papr_vpd_run_sequence()
369 return blob; in papr_vpd_run_sequence()
376 * Run VPD sequences against @loc_code until a blob is successfully
381 * Return: A fully populated VPD blob when successful. Encoded error
386 const struct vpd_blob *blob; in papr_vpd_retrieve() local
396 blob = papr_vpd_run_sequence(loc_code); in papr_vpd_retrieve()
397 if (!IS_ERR(blob)) /* Success. */ in papr_vpd_retrieve()
399 if (PTR_ERR(blob) != -EAGAIN) /* Hard error. */ in papr_vpd_retrieve()
405 return blob; in papr_vpd_retrieve()
410 const struct vpd_blob *blob = file->private_data; in papr_vpd_handle_read() local
413 if (!vpd_blob_has_data(blob)) { in papr_vpd_handle_read()
418 return simple_read_from_buffer(buf, size, off, blob->data, blob->len); in papr_vpd_handle_read()
423 const struct vpd_blob *blob = file->private_data; in papr_vpd_handle_release() local
425 vpd_blob_free(blob); in papr_vpd_handle_release()
432 const struct vpd_blob *blob = file->private_data; in papr_vpd_handle_seek() local
434 return fixed_size_llseek(file, off, whence, blob->len); in papr_vpd_handle_seek()
450 * @ulc and instantiates an immutable VPD "blob" for it. The blob is
452 * backing the blob is freed when the file is released.
464 const struct vpd_blob *blob; in papr_vpd_create_handle() local
475 blob = papr_vpd_retrieve(&klc); in papr_vpd_create_handle()
476 if (IS_ERR(blob)) in papr_vpd_create_handle()
477 return PTR_ERR(blob); in papr_vpd_create_handle()
486 (void *)blob, O_RDONLY); in papr_vpd_create_handle()
498 vpd_blob_free(blob); in papr_vpd_create_handle()