44eedb02f7daa68922370b4c83ba5f3d045dbe9e
[linux-flexiantxendom0-3.2.10.git] / include / asm-ia64 / sn / nic.h
1 /* $Id$
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-2002 Silicon Graphics, Inc. All rights reserved.
8  */
9 #ifndef _ASM_IA64_SN_NIC_H
10 #define _ASM_IA64_SN_NIC_H
11
12 #include <asm/types.h>
13 #include <asm/sn/types.h>
14 #include <linux/devfs_fs_kernel.h>
15
16 #define MCR_DATA(x)                     ((int) ((x) & 1))
17 #define MCR_DONE(x)                     ((x) & 2)
18 #define MCR_PACK(pulse, sample)         ((pulse) << 10 | (sample) << 2)
19
20 typedef __psunsigned_t  nic_data_t;
21
22 typedef int             
23 nic_access_f(nic_data_t data,
24              int pulse, int sample, int delay);
25
26 typedef nic_access_f   *nic_access_t;
27
28 typedef struct nic_vmce_s      *nic_vmce_t;
29 typedef void                    nic_vmc_func(devfs_handle_t v);
30
31 /*
32  * PRIVATE data for Dallas NIC
33  */
34
35 typedef struct nic_state_t {
36     nic_access_t        access;
37     nic_data_t          data;
38     int                 last_disc;
39     int                 done;
40     int                 bit_index;
41     int                 disc_marker;
42     uchar_t             bits[64];
43 } nic_state_t;
44
45 /*
46  * Public interface for Dallas NIC
47  *
48  *
49  *   Access Routine
50  *
51  *   nic_setup requires an access routine that pulses the NIC line for a
52  *   specified duration, samples the NIC line after a specified duration,
53  *   then delays for a third specified duration (for precharge).
54  *
55  *   This general scheme allows us to access NICs through any medium
56  *   (e.g. hub regs, bridge regs, vector writes, system ctlr commands).
57  *
58  *   The access routine should return the sample value 0 or 1, or if an
59  *   error occurs, return a negative error code.  Negative error codes from
60  *   the access routine will abort the NIC operation and be propagated
61  *   through out of the top-level NIC call.
62  */
63
64 #define NIC_OK                  0
65 #define NIC_DONE                1
66 #define NIC_FAIL                2
67 #define NIC_BAD_CRC             3
68 #define NIC_NOT_PRESENT         4
69 #define NIC_REDIR_LOOP          5
70 #define NIC_PARAM               6
71 #define NIC_NOMEM               7
72
73 uint64_t nic_get_phase_bits(void);
74
75 extern int nic_setup(nic_state_t *ns,
76                      nic_access_t access,
77                      nic_data_t data);
78
79 extern int nic_next(nic_state_t *ns,
80                     char *serial,
81                     char *family,
82                     char *crc);
83
84 extern int nic_read_one_page(nic_state_t *ns,
85                              char *family,
86                              char *serial,
87                              char *crc,
88                              int start,
89                              uchar_t *redirect,
90                              uchar_t *byte);
91
92 extern int nic_read_mfg(nic_state_t *ns,
93                         char *family,
94                         char *serial,
95                         char *crc,
96                         uchar_t *pageA,
97                         uchar_t *pageB);
98
99 extern int nic_info_get(nic_access_t access,
100                         nic_data_t data,
101                         char *info);
102
103 extern int nic_item_info_get(char *buf, char *item, char **item_info);
104
105 nic_access_f    nic_access_mcr32;
106
107 extern char *nic_vertex_info_get(devfs_handle_t v);
108
109 extern char *nic_vertex_info_set(nic_access_t access,
110                                  nic_data_t data, 
111                                  devfs_handle_t v);
112
113 extern int nic_vertex_info_match(devfs_handle_t vertex,
114                                  char *name);
115
116 extern char *nic_bridge_vertex_info(devfs_handle_t vertex,
117                                     nic_data_t  data);
118 extern char *nic_hq4_vertex_info(devfs_handle_t vertex,
119                                  nic_data_t data);
120 extern char *nic_ioc3_vertex_info(devfs_handle_t vertex,
121                                     nic_data_t  data,
122                                     int32_t *gpcr_s);
123
124 extern char *nic_hub_vertex_info(devfs_handle_t vertex);
125
126 extern nic_vmce_t       nic_vmc_add(char *, nic_vmc_func *);
127 extern void             nic_vmc_del(nic_vmce_t);
128
129 #endif /* _ASM_IA64_SN_NIC_H */