Lines Matching refs: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)
132 return blob->data && blob->len;
135 static void vpd_blob_free(const struct vpd_blob *blob)
137 if (blob) {
138 kvfree(blob->data);
139 kfree(blob);
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)
154 const size_t new_len = blob->len + len;
155 const size_t old_len = blob->len;
156 const char *old_ptr = blob->data;
167 blob->data = new_ptr;
168 blob->len = new_len;
174 * @generator: Function that supplies the blob data.
188 struct vpd_blob *blob;
193 blob = kzalloc(sizeof(*blob), GFP_KERNEL_ACCOUNT);
194 if (!blob)
198 err = vpd_blob_extend(blob, buf, len);
200 if (err != 0 || !vpd_blob_has_data(blob))
203 return blob;
205 vpd_blob_free(blob);
358 const struct vpd_blob *blob;
362 blob = vpd_blob_generate(vpd_sequence_fill_work_area, &seq);
363 if (!blob)
368 vpd_blob_free(blob);
372 return blob;
379 * Run VPD sequences against @loc_code until a blob is successfully
384 * Return: A fully populated VPD blob when successful. Encoded error
389 const struct vpd_blob *blob;
399 blob = papr_vpd_run_sequence(loc_code);
400 if (!IS_ERR(blob)) /* Success. */
402 if (PTR_ERR(blob) != -EAGAIN) /* Hard error. */
408 return blob;
413 const struct vpd_blob *blob = file->private_data;
416 if (!vpd_blob_has_data(blob)) {
421 return simple_read_from_buffer(buf, size, off, blob->data, blob->len);
426 const struct vpd_blob *blob = file->private_data;
428 vpd_blob_free(blob);
435 const struct vpd_blob *blob = file->private_data;
437 return fixed_size_llseek(file, off, whence, blob->len);
453 * @ulc and instantiates an immutable VPD "blob" for it. The blob is
455 * backing the blob is freed when the file is released.
467 const struct vpd_blob *blob;
478 blob = papr_vpd_retrieve(&klc);
479 if (IS_ERR(blob))
480 return PTR_ERR(blob);
489 (void *)blob, O_RDONLY);
501 vpd_blob_free(blob);