OpenCores
URL https://opencores.org/ocsvn/scarts/scarts/trunk

Subversion Repositories scarts

[/] [scarts/] [trunk/] [toolchain/] [scarts-gdb/] [gdb-6.8/] [sim/] [common/] [hw-handles.c] - Blame information for rev 26

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 26 jlechner
/* The common simulator framework for GDB, the GNU Debugger.
2
 
3
   Copyright 2002, 2007, 2008 Free Software Foundation, Inc.
4
 
5
   Contributed by Andrew Cagney and Red Hat.
6
 
7
   This file is part of GDB.
8
 
9
   This program is free software; you can redistribute it and/or modify
10
   it under the terms of the GNU General Public License as published by
11
   the Free Software Foundation; either version 3 of the License, or
12
   (at your option) any later version.
13
 
14
   This program is distributed in the hope that it will be useful,
15
   but WITHOUT ANY WARRANTY; without even the implied warranty of
16
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17
   GNU General Public License for more details.
18
 
19
   You should have received a copy of the GNU General Public License
20
   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
21
 
22
 
23
#include "hw-main.h"
24
#include "hw-base.h"
25
 
26
 
27
struct hw_handle_mapping {
28
  cell_word external;
29
  struct hw *phandle;
30
  struct hw_instance *ihandle;
31
  struct hw_handle_mapping *next;
32
};
33
 
34
 
35
struct hw_handle_data {
36
  int nr_mappings;
37
  struct hw_handle_mapping *mappings;
38
};
39
 
40
void
41
create_hw_handle_data (struct hw *hw)
42
{
43
  if (hw_parent (hw) == NULL)
44
    {
45
      hw->handles_of_hw = HW_ZALLOC (hw, struct hw_handle_data);
46
    }
47
  else
48
    {
49
      hw->handles_of_hw = hw_root (hw)->handles_of_hw;
50
    }
51
}
52
 
53
void
54
delete_hw_handle_data (struct hw *hw)
55
{
56
  /* NULL */
57
}
58
 
59
 
60
 
61
#if 0
62
void
63
hw_handle_init (struct hw *hw)
64
{
65
  struct hw_handle_mapping *current_map = db->mappings;
66
  if (current_map != NULL)
67
    {
68
      db->nr_mappings = db->mappings->external;
69
      /* verify that the mappings that were not removed are in
70
         sequence down to nr 1 */
71
      while (current_map->next != NULL)
72
        {
73
          if (current_map->external != current_map->next->external + 1)
74
            error ("hw_handle: hw_handle database possibly corrupt");
75
          current_map = current_map->next;
76
        }
77
      ASSERT (current_map->next == NULL);
78
      if (current_map->external != 1)
79
        error ("hw_handle: hw_handle database possibly corrupt");
80
    }
81
  else
82
    {
83
      db->nr_mappings = 0;
84
    }
85
}
86
#endif
87
 
88
 
89
struct hw_instance *
90
hw_handle_ihandle2 (struct hw *hw,
91
                    cell_word external)
92
{
93
  struct hw_handle_data *db = hw->handles_of_hw;
94
  struct hw_handle_mapping *current_map = db->mappings;
95
  while (current_map != NULL)
96
    {
97
      if (current_map->external == external)
98
        return current_map->ihandle;
99
      current_map = current_map->next;
100
    }
101
  return (void*)0;
102
}
103
 
104
 
105
struct hw *
106
hw_handle_phandle2 (struct hw *hw,
107
                    cell_word external)
108
{
109
  struct hw_handle_data *db = hw->handles_of_hw;
110
  struct hw_handle_mapping *current_map = db->mappings;
111
  while (current_map != NULL)
112
    {
113
      if (current_map->external == external)
114
        return current_map->phandle;
115
      current_map = current_map->next;
116
    }
117
  return (void*)0;
118
}
119
 
120
 
121
cell_word
122
hw_handle_2ihandle (struct hw *hw,
123
                    struct hw_instance *internal)
124
{
125
  struct hw_handle_data *db = hw->handles_of_hw;
126
  struct hw_handle_mapping *current_map = db->mappings;
127
  while (current_map != NULL)
128
    {
129
      if (current_map->ihandle == internal)
130
        return current_map->external;
131
      current_map = current_map->next;
132
    }
133
  return 0;
134
}
135
 
136
 
137
cell_word
138
hw_handle_2phandle (struct hw *hw,
139
                    struct hw *internal)
140
{
141
  struct hw_handle_data *db = hw->handles_of_hw;
142
  struct hw_handle_mapping *current_map = db->mappings;
143
  while (current_map != NULL)
144
    {
145
      if (current_map->phandle == internal)
146
        return current_map->external;
147
      current_map = current_map->next;
148
    }
149
  return 0;
150
}
151
 
152
 
153
void
154
hw_handle_add_ihandle (struct hw *hw,
155
                       struct hw_instance *internal)
156
{
157
  struct hw_handle_data *db = hw->handles_of_hw;
158
  if (hw_handle_2ihandle (hw, internal) != 0)
159
    {
160
      hw_abort (hw, "attempting to add an ihandle already in the data base");
161
    }
162
  else
163
    {
164
      /* insert at the front making things in decending order */
165
      struct hw_handle_mapping *new_map = ZALLOC (struct hw_handle_mapping);
166
      new_map->next = db->mappings;
167
      new_map->ihandle = internal;
168
      db->nr_mappings += 1;
169
      new_map->external = db->nr_mappings;
170
      db->mappings = new_map;
171
    }
172
}
173
 
174
 
175
void
176
hw_handle_add_phandle (struct hw *hw,
177
                       struct hw *internal)
178
{
179
  struct hw_handle_data *db = hw->handles_of_hw;
180
  if (hw_handle_2phandle (hw, internal) != 0)
181
    {
182
      hw_abort (hw, "attempting to add a phandle already in the data base");
183
    }
184
  else
185
    {
186
      /* insert at the front making things in decending order */
187
      struct hw_handle_mapping *new_map = ZALLOC (struct hw_handle_mapping);
188
      new_map->next = db->mappings;
189
      new_map->phandle = internal;
190
      db->nr_mappings += 1;
191
      new_map->external = db->nr_mappings;
192
      db->mappings = new_map;
193
    }
194
}
195
 
196
 
197
void
198
hw_handle_remove_ihandle (struct hw *hw,
199
                          struct hw_instance *internal)
200
{
201
  struct hw_handle_data *db = hw->handles_of_hw;
202
  struct hw_handle_mapping **current_map = &db->mappings;
203
  while (*current_map != NULL)
204
    {
205
      if ((*current_map)->ihandle == internal)
206
        {
207
          struct hw_handle_mapping *delete = *current_map;
208
          *current_map = delete->next;
209
          zfree (delete);
210
          return;
211
        }
212
      current_map = &(*current_map)->next;
213
    }
214
  hw_abort (hw, "attempt to remove nonexistant ihandle");
215
}
216
 
217
 
218
void
219
hw_handle_remove_phandle (struct hw *hw,
220
                          struct hw *internal)
221
{
222
  struct hw_handle_data *db = hw->handles_of_hw;
223
  struct hw_handle_mapping **current_map = &db->mappings;
224
  while (*current_map != NULL)
225
    {
226
      if ((*current_map)->phandle == internal)
227
        {
228
          struct hw_handle_mapping *delete = *current_map;
229
          *current_map = delete->next;
230
          zfree (delete);
231
          return;
232
        }
233
      current_map = &(*current_map)->next;
234
    }
235
  hw_abort (hw, "attempt to remove nonexistant phandle");
236
}
237
 
238
 

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.