Lines Matching defs:cap_info

24  * @cap_info: pointer to current instance of capsule_info structure
30 static void efi_free_all_buff_pages(struct capsule_info *cap_info)
32 while (cap_info->index > 0)
33 __free_page(cap_info->pages[--cap_info->index]);
35 cap_info->index = NO_FURTHER_WRITE_ACTION;
38 int __efi_capsule_setup_info(struct capsule_info *cap_info)
44 pages_needed = ALIGN(cap_info->total_size, PAGE_SIZE) / PAGE_SIZE;
52 ret = efi_capsule_supported(cap_info->header.guid,
53 cap_info->header.flags,
54 cap_info->header.imagesize,
55 &cap_info->reset_type);
61 temp_page = krealloc(cap_info->pages,
67 cap_info->pages = temp_page;
69 temp_page = krealloc(cap_info->phys,
75 cap_info->phys = temp_page;
83 * @cap_info: pointer to current instance of capsule_info structure
91 int __weak efi_capsule_setup_info(struct capsule_info *cap_info, void *kbuff,
98 memcpy(&cap_info->header, kbuff, sizeof(cap_info->header));
99 cap_info->total_size = cap_info->header.imagesize;
101 return __efi_capsule_setup_info(cap_info);
107 * @cap_info: pointer to current instance of capsule_info structure
109 static ssize_t efi_capsule_submit_update(struct capsule_info *cap_info)
115 * cap_info->capsule may have been assigned already by a quirk
118 if (!cap_info->capsule) {
119 cap_info->capsule = vmap(cap_info->pages, cap_info->index,
121 if (!cap_info->capsule)
126 ret = efi_capsule_update(cap_info->capsule, cap_info->phys);
128 vunmap(cap_info->capsule);
135 cap_info->index = NO_FURTHER_WRITE_ACTION;
137 if (cap_info->header.flags & EFI_CAPSULE_PERSIST_ACROSS_RESET) {
139 !cap_info->reset_type ? "RESET_COLD" :
140 cap_info->reset_type == 1 ? "RESET_WARM" :
172 struct capsule_info *cap_info = file->private_data;
181 if (cap_info->index < 0)
185 if (!cap_info->page_bytes_remain) {
192 cap_info->pages[cap_info->index] = page;
193 cap_info->phys[cap_info->index] = page_to_phys(page);
194 cap_info->page_bytes_remain = PAGE_SIZE;
195 cap_info->index++;
197 page = cap_info->pages[cap_info->index - 1];
201 kbuff += PAGE_SIZE - cap_info->page_bytes_remain;
204 write_byte = min_t(size_t, count, cap_info->page_bytes_remain);
209 cap_info->page_bytes_remain -= write_byte;
212 if (cap_info->header.headersize == 0) {
213 ret = efi_capsule_setup_info(cap_info, kbuff - cap_info->count,
214 cap_info->count + write_byte);
219 cap_info->count += write_byte;
223 if (cap_info->header.headersize > 0 &&
224 cap_info->count >= cap_info->total_size) {
225 if (cap_info->count > cap_info->total_size) {
231 ret = efi_capsule_submit_update(cap_info);
241 efi_free_all_buff_pages(cap_info);
255 struct capsule_info *cap_info = file->private_data;
257 if (cap_info->index > 0 &&
258 (cap_info->header.headersize == 0 ||
259 cap_info->count < cap_info->total_size)) {
261 efi_free_all_buff_pages(cap_info);
264 kfree(cap_info->pages);
265 kfree(cap_info->phys);
283 struct capsule_info *cap_info;
285 cap_info = kzalloc(sizeof(*cap_info), GFP_KERNEL);
286 if (!cap_info)
289 cap_info->pages = kzalloc(sizeof(void *), GFP_KERNEL);
290 if (!cap_info->pages) {
291 kfree(cap_info);
295 cap_info->phys = kzalloc(sizeof(phys_addr_t), GFP_KERNEL);
296 if (!cap_info->phys) {
297 kfree(cap_info->pages);
298 kfree(cap_info);
302 file->private_data = cap_info;