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

Subversion Repositories or1k

[/] [or1k/] [trunk/] [linux/] [linux-2.4/] [include/] [asm-ia64/] [sn/] [xtalk/] [xtalk.h] - Blame information for rev 1765

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 1276 phoenix
/* $Id: xtalk.h,v 1.1.1.1 2004-04-15 02:58:09 phoenix Exp $
2
 *
3
 * This file is subject to the terms and conditions of the GNU General Public
4
 * License.  See the file "COPYING" in the main directory of this archive
5
 * for more details.
6
 *
7
 * Copyright (C) 1992-1997, 2000-2003 Silicon Graphics, Inc.  All Rights Reserved.
8
 */
9
#ifndef _ASM_SN_XTALK_XTALK_H
10
#define _ASM_SN_XTALK_XTALK_H
11
#include <linux/config.h>
12
 
13
#ifdef __KERNEL__
14
#include "asm/sn/sgi.h"
15
#endif
16
 
17
 
18
/*
19
 * xtalk.h -- platform-independent crosstalk interface
20
 */
21
/*
22
 * User-level device driver visible types
23
 */
24
typedef char            xwidgetnum_t;   /* xtalk widget number  (0..15) */
25
 
26
#define XWIDGET_NONE            (-1)
27
 
28
typedef int xwidget_part_num_t; /* xtalk widget part number */
29
 
30
#define XWIDGET_PART_NUM_NONE   (-1)
31
 
32
typedef int             xwidget_rev_num_t;      /* xtalk widget revision number */
33
 
34
#define XWIDGET_REV_NUM_NONE    (-1)
35
 
36
typedef int xwidget_mfg_num_t;  /* xtalk widget manufacturing ID */
37
 
38
#define XWIDGET_MFG_NUM_NONE    (-1)
39
 
40
typedef struct xtalk_piomap_s *xtalk_piomap_t;
41
 
42
/* It is often convenient to fold the XIO target port
43
 * number into the XIO address.
44
 */
45
#define XIO_NOWHERE     (0xFFFFFFFFFFFFFFFFull)
46
#define XIO_ADDR_BITS   (0x0000FFFFFFFFFFFFull)
47
#define XIO_PORT_BITS   (0xF000000000000000ull)
48
#define XIO_PORT_SHIFT  (60)
49
 
50
#define XIO_PACKED(x)   (((x)&XIO_PORT_BITS) != 0)
51
#define XIO_ADDR(x)     ((x)&XIO_ADDR_BITS)
52
#define XIO_PORT(x)     ((xwidgetnum_t)(((x)&XIO_PORT_BITS) >> XIO_PORT_SHIFT))
53
#define XIO_PACK(p,o)   ((((uint64_t)(p))<<XIO_PORT_SHIFT) | ((o)&XIO_ADDR_BITS))
54
 
55
 
56
/*
57
 * Kernel/driver only definitions
58
 */
59
#if __KERNEL__
60
 
61
#include <asm/types.h>
62
#include <asm/sn/types.h>
63
#include <asm/sn/alenlist.h>
64
#include <asm/sn/ioerror.h>
65
#include <asm/sn/driver.h>
66
#include <asm/sn/dmamap.h>
67
 
68
struct xwidget_hwid_s;
69
 
70
/*
71
 *    Acceptable flag bits for xtalk service calls
72
 *
73
 * XTALK_FIXED: require that mappings be established
74
 *      using fixed sharable resources; address
75
 *      translation results will be permanently
76
 *      available. (PIOMAP_FIXED and DMAMAP_FIXED are
77
 *      the same numeric value and are acceptable).
78
 * XTALK_NOSLEEP: if any part of the operation would
79
 *      sleep waiting for resoruces, return an error
80
 *      instead. (PIOMAP_NOSLEEP and DMAMAP_NOSLEEP are
81
 *      the same numeric value and are acceptable).
82
 * XTALK_INPLACE: when operating on alenlist structures,
83
 *      reuse the source alenlist rather than creating a
84
 *      new one. (PIOMAP_INPLACE and DMAMAP_INPLACE are
85
 *      the same numeric value and are acceptable).
86
 */
87
#define XTALK_FIXED             DMAMAP_FIXED
88
#define XTALK_NOSLEEP           DMAMAP_NOSLEEP
89
#define XTALK_INPLACE           DMAMAP_INPLACE
90
 
91
/* PIO MANAGEMENT */
92
typedef xtalk_piomap_t
93
xtalk_piomap_alloc_f    (vertex_hdl_t dev,      /* set up mapping for this device */
94
                         device_desc_t dev_desc,        /* device descriptor */
95
                         iopaddr_t xtalk_addr,  /* map for this xtalk_addr range */
96
                         size_t byte_count,
97
                         size_t byte_count_max,         /* maximum size of a mapping */
98
                         unsigned flags);       /* defined in sys/pio.h */
99
typedef void
100
xtalk_piomap_free_f     (xtalk_piomap_t xtalk_piomap);
101
 
102
typedef caddr_t
103
xtalk_piomap_addr_f     (xtalk_piomap_t xtalk_piomap,   /* mapping resources */
104
                         iopaddr_t xtalk_addr,  /* map for this xtalk address */
105
                         size_t byte_count);    /* map this many bytes */
106
 
107
typedef void
108
xtalk_piomap_done_f     (xtalk_piomap_t xtalk_piomap);
109
 
110
typedef caddr_t
111
xtalk_piotrans_addr_f   (vertex_hdl_t dev,      /* translate for this device */
112
                         device_desc_t dev_desc,        /* device descriptor */
113
                         iopaddr_t xtalk_addr,  /* Crosstalk address */
114
                         size_t byte_count,     /* map this many bytes */
115
                         unsigned flags);       /* (currently unused) */
116
 
117
extern caddr_t
118
xtalk_pio_addr          (vertex_hdl_t dev,      /* translate for this device */
119
                         device_desc_t dev_desc,        /* device descriptor */
120
                         iopaddr_t xtalk_addr,  /* Crosstalk address */
121
                         size_t byte_count,     /* map this many bytes */
122
                         xtalk_piomap_t *xtalk_piomapp, /* RETURNS mapping resources */
123
                         unsigned flags);       /* (currently unused) */
124
 
125
/* DMA MANAGEMENT */
126
 
127
typedef struct xtalk_dmamap_s *xtalk_dmamap_t;
128
 
129
typedef xtalk_dmamap_t
130
xtalk_dmamap_alloc_f    (vertex_hdl_t dev,      /* set up mappings for this device */
131
                         device_desc_t dev_desc,        /* device descriptor */
132
                         size_t byte_count_max,         /* max size of a mapping */
133
                         unsigned flags);       /* defined in dma.h */
134
 
135
typedef void
136
xtalk_dmamap_free_f     (xtalk_dmamap_t dmamap);
137
 
138
typedef iopaddr_t
139
xtalk_dmamap_addr_f     (xtalk_dmamap_t dmamap,         /* use these mapping resources */
140
                         paddr_t paddr,         /* map for this address */
141
                         size_t byte_count);    /* map this many bytes */
142
 
143
typedef alenlist_t
144
xtalk_dmamap_list_f     (xtalk_dmamap_t dmamap,         /* use these mapping resources */
145
                         alenlist_t alenlist,   /* map this address/length list */
146
                         unsigned flags);
147
 
148
typedef void
149
xtalk_dmamap_done_f     (xtalk_dmamap_t dmamap);
150
 
151
typedef iopaddr_t
152
xtalk_dmatrans_addr_f   (vertex_hdl_t dev,      /* translate for this device */
153
                         device_desc_t dev_desc,        /* device descriptor */
154
                         paddr_t paddr,         /* system physical address */
155
                         size_t byte_count,     /* length */
156
                         unsigned flags);
157
 
158
typedef alenlist_t
159
xtalk_dmatrans_list_f   (vertex_hdl_t dev,      /* translate for this device */
160
                         device_desc_t dev_desc,        /* device descriptor */
161
                         alenlist_t palenlist,  /* system address/length list */
162
                         unsigned flags);
163
 
164
typedef void
165
xtalk_dmamap_drain_f    (xtalk_dmamap_t map);   /* drain this map's channel */
166
 
167
typedef void
168
xtalk_dmaaddr_drain_f   (vertex_hdl_t vhdl,     /* drain channel from this device */
169
                         paddr_t addr,          /* to this physical address */
170
                         size_t bytes);         /* for this many bytes */
171
 
172
typedef void
173
xtalk_dmalist_drain_f   (vertex_hdl_t vhdl,     /* drain channel from this device */
174
                         alenlist_t list);      /* for this set of physical blocks */
175
 
176
 
177
/* INTERRUPT MANAGEMENT */
178
 
179
/*
180
 * A xtalk interrupt resource handle.  When resources are allocated
181
 * in order to satisfy a xtalk_intr_alloc request, a xtalk_intr handle
182
 * is returned.  xtalk_intr_connect associates a software handler with
183
 
184
 * these system resources.
185
 */
186
typedef struct xtalk_intr_s *xtalk_intr_t;
187
 
188
 
189
/*
190
 * When a crosstalk device connects an interrupt, it passes in a function
191
 * that knows how to set its xtalk interrupt register appropriately.  The
192
 * low-level interrupt code may invoke this function later in order to
193
 * migrate an interrupt transparently to the device driver(s) that use this
194
 * interrupt.
195
 *
196
 * The argument passed to this function contains enough information for a
197
 * crosstalk device to (re-)target an interrupt.  A function of this type
198
 * must be supplied by every crosstalk driver.
199
 */
200
typedef int
201
xtalk_intr_setfunc_f    (xtalk_intr_t intr_hdl);        /* interrupt handle */
202
 
203
typedef xtalk_intr_t
204
xtalk_intr_alloc_f      (vertex_hdl_t dev,      /* which crosstalk device */
205
                         device_desc_t dev_desc,        /* device descriptor */
206
                         vertex_hdl_t owner_dev);       /* owner of this intr */
207
 
208
typedef void
209
xtalk_intr_free_f       (xtalk_intr_t intr_hdl);
210
 
211
typedef int
212
xtalk_intr_connect_f    (xtalk_intr_t intr_hdl,         /* xtalk intr resource handle */
213
                        intr_func_t intr_func,         /* xtalk intr handler */
214
                        void *intr_arg, /* arg to intr handler */
215
                        xtalk_intr_setfunc_f *setfunc,          /* func to set intr hw */
216
                        void *setfunc_arg);     /* arg to setfunc */
217
 
218
typedef void
219
xtalk_intr_disconnect_f (xtalk_intr_t intr_hdl);
220
 
221
typedef vertex_hdl_t
222
xtalk_intr_cpu_get_f    (xtalk_intr_t intr_hdl);        /* xtalk intr resource handle */
223
 
224
/* CONFIGURATION MANAGEMENT */
225
 
226
typedef void
227
xtalk_provider_startup_f (vertex_hdl_t xtalk_provider);
228
 
229
typedef void
230
xtalk_provider_shutdown_f (vertex_hdl_t xtalk_provider);
231
 
232
typedef void
233
xtalk_widgetdev_enable_f (vertex_hdl_t, int);
234
 
235
typedef void
236
xtalk_widgetdev_shutdown_f (vertex_hdl_t, int);
237
 
238
typedef int
239
xtalk_dma_enabled_f (vertex_hdl_t);
240
 
241
/* Error Management */
242
 
243
typedef int
244
xtalk_error_devenable_f (vertex_hdl_t xconn_vhdl,
245
                         int devnum,
246
                         int error_code);
247
 
248
/* Early Action Support */
249
typedef caddr_t
250
xtalk_early_piotrans_addr_f (xwidget_part_num_t part_num,
251
                             xwidget_mfg_num_t mfg_num,
252
                             int which,
253
                             iopaddr_t xtalk_addr,
254
                             size_t byte_count,
255
                             unsigned flags);
256
 
257
/*
258
 * Adapters that provide a crosstalk interface adhere to this software interface.
259
 */
260
typedef struct xtalk_provider_s {
261
    /* PIO MANAGEMENT */
262
    xtalk_piomap_alloc_f   *piomap_alloc;
263
    xtalk_piomap_free_f    *piomap_free;
264
    xtalk_piomap_addr_f    *piomap_addr;
265
    xtalk_piomap_done_f    *piomap_done;
266
    xtalk_piotrans_addr_f  *piotrans_addr;
267
 
268
    /* DMA MANAGEMENT */
269
    xtalk_dmamap_alloc_f   *dmamap_alloc;
270
    xtalk_dmamap_free_f    *dmamap_free;
271
    xtalk_dmamap_addr_f    *dmamap_addr;
272
    xtalk_dmamap_list_f    *dmamap_list;
273
    xtalk_dmamap_done_f    *dmamap_done;
274
    xtalk_dmatrans_addr_f  *dmatrans_addr;
275
    xtalk_dmatrans_list_f  *dmatrans_list;
276
    xtalk_dmamap_drain_f   *dmamap_drain;
277
    xtalk_dmaaddr_drain_f  *dmaaddr_drain;
278
    xtalk_dmalist_drain_f  *dmalist_drain;
279
 
280
    /* INTERRUPT MANAGEMENT */
281
    xtalk_intr_alloc_f     *intr_alloc;
282
    xtalk_intr_alloc_f     *intr_alloc_nothd;
283
    xtalk_intr_free_f      *intr_free;
284
    xtalk_intr_connect_f   *intr_connect;
285
    xtalk_intr_disconnect_f *intr_disconnect;
286
 
287
    /* CONFIGURATION MANAGEMENT */
288
    xtalk_provider_startup_f *provider_startup;
289
    xtalk_provider_shutdown_f *provider_shutdown;
290
 
291
    /* Error Management     */
292
    xtalk_error_devenable_f *error_devenable;
293
} xtalk_provider_t;
294
 
295
/* Crosstalk devices use these standard Crosstalk provider interfaces */
296
extern xtalk_piomap_alloc_f xtalk_piomap_alloc;
297
extern xtalk_piomap_free_f xtalk_piomap_free;
298
extern xtalk_piomap_addr_f xtalk_piomap_addr;
299
extern xtalk_piomap_done_f xtalk_piomap_done;
300
extern xtalk_piotrans_addr_f xtalk_piotrans_addr;
301
extern xtalk_dmamap_alloc_f xtalk_dmamap_alloc;
302
extern xtalk_dmamap_free_f xtalk_dmamap_free;
303
extern xtalk_dmamap_addr_f xtalk_dmamap_addr;
304
extern xtalk_dmamap_list_f xtalk_dmamap_list;
305
extern xtalk_dmamap_done_f xtalk_dmamap_done;
306
extern xtalk_dmatrans_addr_f xtalk_dmatrans_addr;
307
extern xtalk_dmatrans_list_f xtalk_dmatrans_list;
308
extern xtalk_dmamap_drain_f xtalk_dmamap_drain;
309
extern xtalk_dmaaddr_drain_f xtalk_dmaaddr_drain;
310
extern xtalk_dmalist_drain_f xtalk_dmalist_drain;
311
extern xtalk_intr_alloc_f xtalk_intr_alloc;
312
extern xtalk_intr_alloc_f xtalk_intr_alloc_nothd;
313
extern xtalk_intr_free_f xtalk_intr_free;
314
extern xtalk_intr_connect_f xtalk_intr_connect;
315
extern xtalk_intr_disconnect_f xtalk_intr_disconnect;
316
extern xtalk_intr_cpu_get_f xtalk_intr_cpu_get;
317
extern xtalk_provider_startup_f xtalk_provider_startup;
318
extern xtalk_provider_shutdown_f xtalk_provider_shutdown;
319
extern xtalk_widgetdev_enable_f xtalk_widgetdev_enable;
320
extern xtalk_widgetdev_shutdown_f xtalk_widgetdev_shutdown;
321
extern xtalk_dma_enabled_f xtalk_dma_enabled;
322
extern xtalk_error_devenable_f xtalk_error_devenable;
323
extern xtalk_early_piotrans_addr_f xtalk_early_piotrans_addr;
324
 
325
/* error management */
326
 
327
extern int              xtalk_error_handler(vertex_hdl_t,
328
                                            int,
329
                                            ioerror_mode_t,
330
                                            ioerror_t *);
331
 
332
/*
333
 * Generic crosstalk interface, for use with all crosstalk providers
334
 * and all crosstalk devices.
335
 */
336
typedef unchar xtalk_intr_vector_t;     /* crosstalk interrupt vector (0..255) */
337
 
338
#define XTALK_INTR_VECTOR_NONE  (xtalk_intr_vector_t)0
339
 
340
/* Generic crosstalk interrupt interfaces */
341
extern vertex_hdl_t     xtalk_intr_dev_get(xtalk_intr_t xtalk_intr);
342
extern xwidgetnum_t     xtalk_intr_target_get(xtalk_intr_t xtalk_intr);
343
extern xtalk_intr_vector_t xtalk_intr_vector_get(xtalk_intr_t xtalk_intr);
344
extern iopaddr_t        xtalk_intr_addr_get(xtalk_intr_t xtalk_intr);
345
extern vertex_hdl_t     xtalk_intr_cpu_get(xtalk_intr_t xtalk_intr);
346
extern void            *xtalk_intr_sfarg_get(xtalk_intr_t xtalk_intr);
347
 
348
/* Generic crosstalk pio interfaces */
349
extern vertex_hdl_t     xtalk_pio_dev_get(xtalk_piomap_t xtalk_piomap);
350
extern xwidgetnum_t     xtalk_pio_target_get(xtalk_piomap_t xtalk_piomap);
351
extern iopaddr_t        xtalk_pio_xtalk_addr_get(xtalk_piomap_t xtalk_piomap);
352
extern size_t           xtalk_pio_mapsz_get(xtalk_piomap_t xtalk_piomap);
353
extern caddr_t          xtalk_pio_kvaddr_get(xtalk_piomap_t xtalk_piomap);
354
 
355
/* Generic crosstalk dma interfaces */
356
extern vertex_hdl_t     xtalk_dma_dev_get(xtalk_dmamap_t xtalk_dmamap);
357
extern xwidgetnum_t     xtalk_dma_target_get(xtalk_dmamap_t xtalk_dmamap);
358
 
359
/* Register/unregister Crosstalk providers and get implementation handle */
360
extern void             xtalk_set_early_piotrans_addr(xtalk_early_piotrans_addr_f *);
361
extern void             xtalk_provider_register(vertex_hdl_t provider, xtalk_provider_t *xtalk_fns);
362
extern void             xtalk_provider_unregister(vertex_hdl_t provider);
363
extern xtalk_provider_t *xtalk_provider_fns_get(vertex_hdl_t provider);
364
 
365
/* Crosstalk Switch generic layer, for use by initialization code */
366
extern void             xswitch_census(vertex_hdl_t xswitchv);
367
extern void             xswitch_init_widgets(vertex_hdl_t xswitchv);
368
 
369
/* early init interrupt management */
370
 
371
typedef void
372
xwidget_intr_preset_f   (void *which_widget,
373
                         int which_widget_intr,
374
                         xwidgetnum_t targ,
375
                         iopaddr_t addr,
376
                         xtalk_intr_vector_t vect);
377
 
378
typedef void
379
xtalk_intr_prealloc_f   (void *which_xtalk,
380
                         xtalk_intr_vector_t xtalk_vector,
381
                         xwidget_intr_preset_f *preset_func,
382
                         void *which_widget,
383
                         int which_widget_intr);
384
 
385
typedef void
386
xtalk_intr_preconn_f    (void *which_xtalk,
387
                         xtalk_intr_vector_t xtalk_vector,
388
                         intr_func_t intr_func,
389
                         intr_arg_t intr_arg);
390
 
391
 
392
#define XTALK_ADDR_TO_UPPER(xtalk_addr) (((iopaddr_t)(xtalk_addr) >> 32) & 0xffff)
393
#define XTALK_ADDR_TO_LOWER(xtalk_addr) ((iopaddr_t)(xtalk_addr) & 0xffffffff)
394
 
395
typedef xtalk_intr_setfunc_f *xtalk_intr_setfunc_t;
396
 
397
typedef void            xtalk_iter_f(vertex_hdl_t vhdl);
398
 
399
extern void             xtalk_iterate(char *prefix, xtalk_iter_f *func);
400
 
401
#endif                          /* __KERNEL__ */
402
#endif                          /* _ASM_SN_XTALK_XTALK_H */

powered by: WebSVN 2.1.0

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