-
Notifications
You must be signed in to change notification settings - Fork 13
/
devices.c
116 lines (95 loc) · 2.67 KB
/
devices.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
/**
* \file devices.c
* \brief Platform devices and handling functions
* \author Antoine Fraboulet
* \date 2005
**/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "arch/common/hardware.h"
#include "machine/machine.h"
#include "devices/devices.h"
/* ************************************************** */
/* ************************************************** */
/* ************************************************** */
int devices_delete(void)
{
int res = 0;
MAP_OVER_DEVICES(delete);
return res;
}
/* ************************************************** */
/* ************************************************** */
/* ************************************************** */
int devices_memory_allocate(void)
{
int i;
int size;
uint8_t *devzone;
/* state memory allocation */
size = 0;
for(i=0; i<machine.device_max; i++)
{
size += machine.device_size[i];
}
devzone = machine_state_allocate(size);
if (devzone == NULL)
return 1;
/* state memory distribution */
machine.device[0].data = devzone;
for(i=1; i<machine.device_max; i++)
{
machine.device[i].data = ((char*) machine.device[i-1].data) + machine.device_size[i-1];
}
return 0;
}
/* ************************************************** */
/* ************************************************** */
/* ************************************************** */
int devices_reset(void)
{
int res = 0;
/* reset all devices */
MAP_OVER_DEVICES(reset);
/* post reset to init interconnect */
/* defined in platform dependant description */
res += devices_reset_post();
return res;
}
/* ************************************************** */
/* ************************************************** */
/* ************************************************** */
void devices_print(void)
{
int i;
OUTPUT_BOXM("device list:\n");
for(i=0; i < machine.device_max; i++)
{
if (machine.device[i].name != NULL)
{
OUTPUT_BOXM(" dev %02d : %s\n",i,machine.device[i].name);
}
}
}
/* ************************************************** */
/* ************************************************** */
/* ************************************************** */
void devices_dump_stats(int64_t user_nanotime)
{
int i;
for(i=0; i< machine.device_max; i++)
{
if (machine.device[i].name != NULL)
{
OUTPUT_STATS(" - %-28s:\n",machine.device[i].name);
if (machine.device[i].statdump != NULL)
{
machine.device[i].statdump(i,user_nanotime);
}
}
}
}
/* ************************************************** */
/* ************************************************** */
/* ************************************************** */