Coverage Report

Created: 2026-10-17 06:38

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/barebox/drivers/misc/mem.c
Line
Count
Source
1
// SPDX-License-Identifier: GPL-2.0-only
2
/*
3
 * Copyright (c) 2011 Sascha Hauer <s.hauer@pengutronix.de>, Pengutronix
4
 */
5
6
#include <common.h>
7
#include <driver.h>
8
#include <init.h>
9
#include <asm/cache.h>
10
11
static int mem_flush(struct cdev *cdev)
12
0
{
13
0
  sync_caches_for_execution();
14
0
  return 0;
15
0
}
16
17
static struct cdev_operations memops = {
18
  .read  = mem_read,
19
  .write = mem_write,
20
  .memmap = generic_memmap_rw,
21
  .flush = mem_flush,
22
};
23
24
static int mem_probe(struct device *dev)
25
26
{
26
26
  struct cdev *cdev;
27
28
26
  cdev = xzalloc(sizeof (*cdev));
29
26
  dev->priv = cdev;
30
31
26
  cdev->name = (char*)dev->resource[0].name;
32
26
  if (dev->resource[0].start == 0 && dev->resource[0].end == ~0) {
33
    /*
34
     * Special case for /dev/mem. We can't express it's size as it's
35
     * outside of our address range. Set DEVFS_IS_CHARACTER_DEV to
36
     * bypass size checks.
37
     */
38
26
    cdev->size = 0;
39
26
    cdev->flags = DEVFS_IS_CHARACTER_DEV;
40
26
  } else {
41
0
    cdev->size = resource_size(&dev->resource[0]);
42
0
  }
43
44
26
  cdev->ops = &memops;
45
26
  cdev->dev = dev;
46
47
26
  devfs_create(cdev);
48
49
26
  return 0;
50
26
}
51
52
static struct driver mem_drv = {
53
  .name  = "mem",
54
  .probe = mem_probe,
55
};
56
57
static int mem_init(void)
58
26
{
59
26
  struct device *dev;
60
26
  struct resource res = {
61
26
    .start = 0,
62
26
    .end = ~0,
63
26
    .flags = IORESOURCE_MEM,
64
26
    .name = "mem",
65
26
  };
66
26
  int ret;
67
68
26
  dev = device_alloc("mem", DEVICE_ID_DYNAMIC);
69
26
  if (!dev)
70
0
    return -ENOMEM;
71
72
26
  dev->resource = xmemdup(&res, sizeof(res));
73
26
  dev->num_resources = 1;
74
75
26
  ret = platform_device_register(dev);
76
26
  if (ret)
77
0
    return ret;
78
79
26
  return platform_driver_register(&mem_drv);
80
26
}
81
device_initcall(mem_init);