Linux Audio

Check our new training course

Loading...
Note: File does not exist in v5.9.
 1// SPDX-License-Identifier: GPL-2.0
 2/*
 3 * Copyright (C) 2000 - 2007 Jeff Dike (jdike@{addtoit,linux.intel}.com)
 4 */
 5#include <linux/memblock.h>
 6#include <os.h>
 7
 8#include "um_arch.h"
 9
10static int __init __uml_load_file(const char *filename, void *buf, int size)
11{
12	int fd, n;
13
14	fd = os_open_file(filename, of_read(OPENFLAGS()), 0);
15	if (fd < 0) {
16		printk(KERN_ERR "Opening '%s' failed - err = %d\n", filename,
17		       -fd);
18		return -1;
19	}
20	n = os_read_file(fd, buf, size);
21	if (n != size) {
22		printk(KERN_ERR "Read of %d bytes from '%s' failed, "
23		       "err = %d\n", size,
24		       filename, -n);
25		return -1;
26	}
27
28	os_close_file(fd);
29	return 0;
30}
31
32void *uml_load_file(const char *filename, unsigned long long *size)
33{
34	void *area;
35	int err;
36
37	*size = 0;
38
39	if (!filename)
40		return NULL;
41
42	err = os_file_size(filename, size);
43	if (err)
44		return NULL;
45
46	if (*size == 0) {
47		printk(KERN_ERR "\"%s\" is empty\n", filename);
48		return NULL;
49	}
50
51	area = memblock_alloc(*size, SMP_CACHE_BYTES);
52	if (!area)
53		panic("%s: Failed to allocate %llu bytes\n", __func__, *size);
54
55	if (__uml_load_file(filename, area, *size)) {
56		memblock_free(area, *size);
57		return NULL;
58	}
59
60	return area;
61}