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

Subversion Repositories or1k

[/] [or1k/] [tags/] [VER_5_3/] [gdb-5.3/] [sim/] [common/] [hw-handles.c] - Blame information for rev 1182

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 1181 sfurman
/* The common simulator framework for GDB, the GNU Debugger.
2
 
3
   Copyright 2002 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 2 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, write to the Free Software
21
   Foundation, Inc., 59 Temple Place - Suite 330,
22
   Boston, MA 02111-1307, USA.  */
23
 
24
 
25
#include "hw-main.h"
26
#include "hw-base.h"
27
 
28
 
29
struct hw_handle_mapping {
30
  cell_word external;
31
  struct hw *phandle;
32
  struct hw_instance *ihandle;
33
  struct hw_handle_mapping *next;
34
};
35
 
36
 
37
struct hw_handle_data {
38
  int nr_mappings;
39
  struct hw_handle_mapping *mappings;
40
};
41
 
42
void
43
create_hw_handle_data (struct hw *hw)
44
{
45
  if (hw_parent (hw) == NULL)
46
    {
47
      hw->handles_of_hw = HW_ZALLOC (hw, struct hw_handle_data);
48
    }
49
  else
50
    {
51
      hw->handles_of_hw = hw_root (hw)->handles_of_hw;
52
    }
53
}
54
 
55
void
56
delete_hw_handle_data (struct hw *hw)
57
{
58
  /* NULL */
59
}
60
 
61
 
62
 
63
#if 0
64
void
65
hw_handle_init (struct hw *hw)
66
{
67
  struct hw_handle_mapping *current_map = db->mappings;
68
  if (current_map != NULL)
69
    {
70
      db->nr_mappings = db->mappings->external;
71
      /* verify that the mappings that were not removed are in
72
         sequence down to nr 1 */
73
      while (current_map->next != NULL)
74
        {
75
          if (current_map->external != current_map->next->external + 1)
76
            error ("hw_handle: hw_handle database possibly corrupt");
77
          current_map = current_map->next;
78
        }
79
      ASSERT (current_map->next == NULL);
80
      if (current_map->external != 1)
81
        error ("hw_handle: hw_handle database possibly corrupt");
82
    }
83
  else
84
    {
85
      db->nr_mappings = 0;
86
    }
87
}
88
#endif
89
 
90
 
91
struct hw_instance *
92
hw_handle_ihandle2 (struct hw *hw,
93
                    cell_word external)
94
{
95
  struct hw_handle_data *db = hw->handles_of_hw;
96
  struct hw_handle_mapping *current_map = db->mappings;
97
  while (current_map != NULL)
98
    {
99
      if (current_map->external == external)
100
        return current_map->ihandle;
101
      current_map = current_map->next;
102
    }
103
  return (void*)0;
104
}
105
 
106
 
107
struct hw *
108
hw_handle_phandle2 (struct hw *hw,
109
                    cell_word external)
110
{
111
  struct hw_handle_data *db = hw->handles_of_hw;
112
  struct hw_handle_mapping *current_map = db->mappings;
113
  while (current_map != NULL)
114
    {
115
      if (current_map->external == external)
116
        return current_map->phandle;
117
      current_map = current_map->next;
118
    }
119
  return (void*)0;
120
}
121
 
122
 
123
cell_word
124
hw_handle_2ihandle (struct hw *hw,
125
                    struct hw_instance *internal)
126
{
127
  struct hw_handle_data *db = hw->handles_of_hw;
128
  struct hw_handle_mapping *current_map = db->mappings;
129
  while (current_map != NULL)
130
    {
131
      if (current_map->ihandle == internal)
132
        return current_map->external;
133
      current_map = current_map->next;
134
    }
135
  return 0;
136
}
137
 
138
 
139
cell_word
140
hw_handle_2phandle (struct hw *hw,
141
                    struct hw *internal)
142
{
143
  struct hw_handle_data *db = hw->handles_of_hw;
144
  struct hw_handle_mapping *current_map = db->mappings;
145
  while (current_map != NULL)
146
    {
147
      if (current_map->phandle == internal)
148
        return current_map->external;
149
      current_map = current_map->next;
150
    }
151
  return 0;
152
}
153
 
154
 
155
void
156
hw_handle_add_ihandle (struct hw *hw,
157
                       struct hw_instance *internal)
158
{
159
  struct hw_handle_data *db = hw->handles_of_hw;
160
  if (hw_handle_2ihandle (hw, internal) != 0)
161
    {
162
      hw_abort (hw, "attempting to add an ihandle already in the data base");
163
    }
164
  else
165
    {
166
      /* insert at the front making things in decending order */
167
      struct hw_handle_mapping *new_map = ZALLOC (struct hw_handle_mapping);
168
      new_map->next = db->mappings;
169
      new_map->ihandle = internal;
170
      db->nr_mappings += 1;
171
      new_map->external = db->nr_mappings;
172
      db->mappings = new_map;
173
    }
174
}
175
 
176
 
177
void
178
hw_handle_add_phandle (struct hw *hw,
179
                       struct hw *internal)
180
{
181
  struct hw_handle_data *db = hw->handles_of_hw;
182
  if (hw_handle_2phandle (hw, internal) != 0)
183
    {
184
      hw_abort (hw, "attempting to add a phandle already in the data base");
185
    }
186
  else
187
    {
188
      /* insert at the front making things in decending order */
189
      struct hw_handle_mapping *new_map = ZALLOC (struct hw_handle_mapping);
190
      new_map->next = db->mappings;
191
      new_map->phandle = internal;
192
      db->nr_mappings += 1;
193
      new_map->external = db->nr_mappings;
194
      db->mappings = new_map;
195
    }
196
}
197
 
198
 
199
void
200
hw_handle_remove_ihandle (struct hw *hw,
201
                          struct hw_instance *internal)
202
{
203
  struct hw_handle_data *db = hw->handles_of_hw;
204
  struct hw_handle_mapping **current_map = &db->mappings;
205
  while (*current_map != NULL)
206
    {
207
      if ((*current_map)->ihandle == internal)
208
        {
209
          struct hw_handle_mapping *delete = *current_map;
210
          *current_map = delete->next;
211
          zfree (delete);
212
          return;
213
        }
214
      current_map = &(*current_map)->next;
215
    }
216
  hw_abort (hw, "attempt to remove nonexistant ihandle");
217
}
218
 
219
 
220
void
221
hw_handle_remove_phandle (struct hw *hw,
222
                          struct hw *internal)
223
{
224
  struct hw_handle_data *db = hw->handles_of_hw;
225
  struct hw_handle_mapping **current_map = &db->mappings;
226
  while (*current_map != NULL)
227
    {
228
      if ((*current_map)->phandle == internal)
229
        {
230
          struct hw_handle_mapping *delete = *current_map;
231
          *current_map = delete->next;
232
          zfree (delete);
233
          return;
234
        }
235
      current_map = &(*current_map)->next;
236
    }
237
  hw_abort (hw, "attempt to remove nonexistant phandle");
238
}
239
 
240
 

powered by: WebSVN 2.1.0

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