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

Subversion Repositories or1k

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

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 1275 phoenix
/*
2
 * Copyright (c) 2002-2003 Silicon Graphics, Inc.  All Rights Reserved.
3
 *
4
 * This program is free software; you can redistribute it and/or modify it
5
 * under the terms of version 2 of the GNU General Public License
6
 * as published by the Free Software Foundation.
7
 *
8
 * This program is distributed in the hope that it would be useful, but
9
 * WITHOUT ANY WARRANTY; without even the implied warranty of
10
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
11
 *
12
 * Further, this software is distributed without any warranty that it is
13
 * free of the rightful claim of any third person regarding infringement
14
 * or the like.  Any license provided herein, whether implied or
15
 * otherwise, applies only to this software file.  Patent licenses, if
16
 * any, provided herein do not apply to combinations of this program with
17
 * other software, or any other product whatsoever.
18
 *
19
 * You should have received a copy of the GNU General Public
20
 * License along with this program; if not, write the Free Software
21
 * Foundation, Inc., 59 Temple Place - Suite 330, Boston MA 02111-1307, USA.
22
 *
23
 * Contact information:  Silicon Graphics, Inc., 1600 Amphitheatre Pkwy,
24
 * Mountain View, CA  94043, or:
25
 *
26
 * http://www.sgi.com
27
 *
28
 */
29
 
30
#ifndef _ASM_IA64_SN_IOC4_H
31
#define _ASM_IA64_SN_IOC4_H
32
 
33
 
34
/*
35
 * ioc4.h - IOC4 chip header file
36
 */
37
 
38
/* Notes:
39
 * The IOC4 chip is a 32-bit PCI device that provides 4 serial ports,
40
 * an IDE bus interface, a PC keyboard/mouse interface, and a real-time
41
 * external interrupt interface.
42
 *
43
 * It includes an optimized DMA buffer management, and a store-and-forward
44
 * buffer RAM.
45
 *
46
 * All IOC4 registers are 32 bits wide.
47
 */
48
typedef uint32_t ioc4reg_t;
49
 
50
/*
51
 * PCI Configuration Space Register Address Map, use offset from IOC4 PCI
52
 * configuration base such that this can be used for multiple IOC4s
53
 */
54
#define IOC4_PCI_ID             0x0     /* ID */
55
 
56
#define IOC4_VENDOR_ID_NUM      0x10A9
57
#define IOC4_DEVICE_ID_NUM      0x100A 
58
#define IOC4_ADDRSPACE_MASK     0xfff00000ULL
59
 
60
#define IOC4_PCI_SCR            0x4 /* Status/Command */
61
#define IOC4_PCI_REV            0x8 /* Revision */
62
#define IOC4_PCI_LAT            0xC /* Latency Timer */
63
#define IOC4_PCI_BAR0           0x10 /* IOC4 base address 0 */
64
#define IOC4_PCI_SIDV           0x2c /* Subsys ID and vendor */
65
#define IOC4_PCI_CAP            0x34 /* Capability pointer */
66
#define IOC4_PCI_LATGNTINT      0x3c /* Max_lat, min_gnt, int_pin, int_line */
67
 
68
/*
69
 * PCI Memory Space Map
70
 */
71
#define IOC4_PCI_ERR_ADDR_L     0x000   /* Low Error Address */
72
#define IOC4_PCI_ERR_ADDR_VLD           (0x1 << 0)
73
#define IOC4_PCI_ERR_ADDR_MST_ID_MSK    (0xf << 1)
74
#define IOC4_PCI_ERR_ADDR_MST_NUM_MSK   (0xe << 1)
75
#define IOC4_PCI_ERR_ADDR_MST_TYP_MSK   (0x1 << 1)
76
#define IOC4_PCI_ERR_ADDR_MUL_ERR       (0x1 << 5)
77
#define IOC4_PCI_ERR_ADDR_ADDR_MSK      (0x3ffffff << 6)
78
 
79
/* Master IDs contained in PCI_ERR_ADDR_MST_ID_MSK */
80
#define IOC4_MST_ID_S0_TX               0
81
#define IOC4_MST_ID_S0_RX               1
82
#define IOC4_MST_ID_S1_TX               2
83
#define IOC4_MST_ID_S1_RX               3
84
#define IOC4_MST_ID_S2_TX               4
85
#define IOC4_MST_ID_S2_RX               5
86
#define IOC4_MST_ID_S3_TX               6
87
#define IOC4_MST_ID_S3_RX               7
88
#define IOC4_MST_ID_ATA                 8
89
 
90
#define IOC4_PCI_ERR_ADDR_H     0x004   /* High Error Address */
91
 
92
#define IOC4_SIO_IR             0x008   /* SIO Interrupt Register */
93
#define IOC4_OTHER_IR           0x00C   /* Other Interrupt Register */
94
 
95
/* These registers are read-only for general kernel code. To modify
96
 * them use the functions in ioc4.c
97
 */
98
#define IOC4_SIO_IES_RO         0x010   /* SIO Interrupt Enable Set Reg */
99
#define IOC4_OTHER_IES_RO       0x014   /* Other Interrupt Enable Set Reg */
100
#define IOC4_SIO_IEC_RO         0x018   /* SIO Interrupt Enable Clear Reg */
101
#define IOC4_OTHER_IEC_RO       0x01C   /* Other Interrupt Enable Clear Reg */
102
 
103
#define IOC4_SIO_CR             0x020   /* SIO Control Reg */
104
#define IOC4_INT_OUT            0x028   /* INT_OUT Reg (realtime interrupt) */
105
#define IOC4_GPCR_S             0x030   /* GenericPIO Cntrl Set Register */
106
#define IOC4_GPCR_C             0x034   /* GenericPIO Cntrl Clear Register */
107
#define IOC4_GPDR               0x038   /* GenericPIO Data Register */
108
#define IOC4_GPPR_0             0x040   /* GenericPIO Pin Registers */
109
#define IOC4_GPPR_OFF           0x4
110
#define IOC4_GPPR(x)            (IOC4_GPPR_0+(x)*IOC4_GPPR_OFF)
111
 
112
/* ATAPI Registers */
113
#define IOC4_ATA_0              0x100   /* Data w/timing */
114
#define IOC4_ATA_1              0x104   /* Error/Features w/timing */
115
#define IOC4_ATA_2              0x108   /* Sector Count w/timing */
116
#define IOC4_ATA_3              0x10C   /* Sector Number w/timing */
117
#define IOC4_ATA_4              0x110   /* Cyliner Low w/timing */
118
#define IOC4_ATA_5              0x114   /* Cylinder High w/timing */
119
#define IOC4_ATA_6              0x118   /* Device/Head w/timing */
120
#define IOC4_ATA_7              0x11C   /* Status/Command w/timing */
121
#define IOC4_ATA_0_AUX          0x120   /* Aux Status/Device Cntrl w/timing */
122
#define IOC4_ATA_TIMING         0x140   /* Timing value register 0 */
123
#define IOC4_ATA_DMA_PTR_L      0x144   /* Low Memory Pointer to DMA List */
124
#define IOC4_ATA_DMA_PTR_H      0x148   /* High Memory Pointer to DMA List */
125
#define IOC4_ATA_DMA_ADDR_L     0x14C   /* Low Memory DMA Address */
126
#define IOC4_ATA_DMA_ADDR_H     0x150   /* High Memory DMA Addresss */
127
#define IOC4_ATA_BC_DEV         0x154   /* DMA Byte Count at Device */
128
#define IOC4_ATA_BC_MEM         0x158   /* DMA Byte Count at Memory */
129
#define IOC4_ATA_DMA_CTRL       0x15C   /* DMA Control/Status */
130
 
131
/* Keyboard and Mouse Registers */
132
#define IOC4_KM_CSR             0x200   /* Kbd and Mouse Cntrl/Status Reg */
133
#define IOC4_K_RD               0x204   /* Kbd Read Data Register */
134
#define IOC4_M_RD               0x208   /* Mouse Read Data Register */
135
#define IOC4_K_WD               0x20C   /* Kbd Write Data Register */
136
#define IOC4_M_WD               0x210   /* Mouse Write Data Register */
137
 
138
/* Serial Port Registers used for DMA mode serial I/O */
139
#define IOC4_SBBR01_H           0x300   /* Serial Port Ring Buffers 
140
                                           Base Reg High for Channels 0 1*/
141
#define IOC4_SBBR01_L           0x304   /* Serial Port Ring Buffers 
142
                                           Base Reg Low for Channels 0 1 */
143
#define IOC4_SBBR23_H           0x308   /* Serial Port Ring Buffers 
144
                                           Base Reg High for Channels 2 3*/
145
#define IOC4_SBBR23_L           0x30C   /* Serial Port Ring Buffers 
146
                                           Base Reg Low for Channels 2 3 */
147
 
148
#define IOC4_SSCR_0             0x310   /* Serial Port 0 Control */
149
#define IOC4_STPIR_0            0x314   /* Serial Port 0 TX Produce */
150
#define IOC4_STCIR_0            0x318   /* Serial Port 0 TX Consume */
151
#define IOC4_SRPIR_0            0x31C   /* Serial Port 0 RX Produce */
152
#define IOC4_SRCIR_0            0x320   /* Serial Port 0 RX Consume */
153
#define IOC4_SRTR_0             0x324   /* Serial Port 0 Receive Timer Reg */
154
#define IOC4_SHADOW_0           0x328   /* Serial Port 0 16550 Shadow Reg */
155
 
156
#define IOC4_SSCR_1             0x32C   /* Serial Port 1 Control */
157
#define IOC4_STPIR_1            0x330   /* Serial Port 1 TX Produce */
158
#define IOC4_STCIR_1            0x334   /* Serial Port 1 TX Consume */
159
#define IOC4_SRPIR_1            0x338   /* Serial Port 1 RX Produce */
160
#define IOC4_SRCIR_1            0x33C   /* Serial Port 1 RX Consume */
161
#define IOC4_SRTR_1             0x340   /* Serial Port 1 Receive Timer Reg */
162
#define IOC4_SHADOW_1           0x344   /* Serial Port 1 16550 Shadow Reg */
163
 
164
#define IOC4_SSCR_2             0x348   /* Serial Port 2 Control */
165
#define IOC4_STPIR_2            0x34C   /* Serial Port 2 TX Produce */
166
#define IOC4_STCIR_2            0x350   /* Serial Port 2 TX Consume */
167
#define IOC4_SRPIR_2            0x354   /* Serial Port 2 RX Produce */
168
#define IOC4_SRCIR_2            0x358   /* Serial Port 2 RX Consume */
169
#define IOC4_SRTR_2             0x35C   /* Serial Port 2 Receive Timer Reg */
170
#define IOC4_SHADOW_2           0x360   /* Serial Port 2 16550 Shadow Reg */
171
 
172
#define IOC4_SSCR_3             0x364   /* Serial Port 3 Control */
173
#define IOC4_STPIR_3            0x368   /* Serial Port 3 TX Produce */
174
#define IOC4_STCIR_3            0x36C   /* Serial Port 3 TX Consume */
175
#define IOC4_SRPIR_3            0x370   /* Serial Port 3 RX Produce */
176
#define IOC4_SRCIR_3            0x374   /* Serial Port 3 RX Consume */
177
#define IOC4_SRTR_3             0x378   /* Serial Port 3 Receive Timer Reg */
178
#define IOC4_SHADOW_3           0x37C   /* Serial Port 3 16550 Shadow Reg */
179
 
180
#define IOC4_UART0_BASE         0x380   /* UART 0 */
181
#define IOC4_UART1_BASE         0x388   /* UART 1 */
182
#define IOC4_UART2_BASE         0x390   /* UART 2 */
183
#define IOC4_UART3_BASE         0x398   /* UART 3 */
184
 
185
/* Private page address aliases for usermode mapping */
186
#define IOC4_INT_OUT_P          0x04000 /* INT_OUT Reg */
187
 
188
#define IOC4_SSCR_0_P           0x08000 /* Serial Port 0 */
189
#define IOC4_STPIR_0_P          0x08004
190
#define IOC4_STCIR_0_P          0x08008 /* (read-only) */
191
#define IOC4_SRPIR_0_P          0x0800C /* (read-only) */
192
#define IOC4_SRCIR_0_P          0x08010
193
#define IOC4_SRTR_0_P           0x08014
194
#define IOC4_UART_LSMSMCR_0_P   0x08018 /* (read-only) */
195
 
196
#define IOC4_SSCR_1_P           0x0C000 /* Serial Port 1 */
197
#define IOC4_STPIR_1_P          0x0C004
198
#define IOC4_STCIR_1_P          0x0C008 /* (read-only) */
199
#define IOC4_SRPIR_1_P          0x0C00C /* (read-only) */
200
#define IOC4_SRCIR_1_P          0x0C010
201
#define IOC4_SRTR_1_P           0x0C014
202
#define IOC4_UART_LSMSMCR_1_P   0x0C018 /* (read-only) */
203
 
204
#define IOC4_SSCR_2_P           0x10000 /* Serial Port 2 */
205
#define IOC4_STPIR_2_P          0x10004
206
#define IOC4_STCIR_2_P          0x10008 /* (read-only) */
207
#define IOC4_SRPIR_2_P          0x1000C /* (read-only) */
208
#define IOC4_SRCIR_2_P          0x10010
209
#define IOC4_SRTR_2_P           0x10014
210
#define IOC4_UART_LSMSMCR_2_P   0x10018 /* (read-only) */
211
 
212
#define IOC4_SSCR_3_P           0x14000 /* Serial Port 3 */
213
#define IOC4_STPIR_3_P          0x14004
214
#define IOC4_STCIR_3_P          0x14008 /* (read-only) */
215
#define IOC4_SRPIR_3_P          0x1400C /* (read-only) */
216
#define IOC4_SRCIR_3_P          0x14010
217
#define IOC4_SRTR_3_P           0x14014
218
#define IOC4_UART_LSMSMCR_3_P   0x14018 /* (read-only) */
219
 
220
#define IOC4_ALIAS_PAGE_SIZE    0x4000
221
 
222
/* Interrupt types */
223
typedef enum ioc4_intr_type_e {
224
    ioc4_sio_intr_type,
225
    ioc4_other_intr_type,
226
    ioc4_num_intr_types
227
} ioc4_intr_type_t;
228
#define ioc4_first_intr_type    ioc4_sio_intr_type
229
 
230
/* Bitmasks for IOC4_SIO_IR, IOC4_SIO_IEC, and IOC4_SIO_IES  */
231
#define IOC4_SIO_IR_S0_TX_MT            0x00000001 /* Serial port 0 TX empty */
232
#define IOC4_SIO_IR_S0_RX_FULL          0x00000002 /* Port 0 RX buf full */
233
#define IOC4_SIO_IR_S0_RX_HIGH          0x00000004 /* Port 0 RX hiwat */
234
#define IOC4_SIO_IR_S0_RX_TIMER         0x00000008 /* Port 0 RX timeout */
235
#define IOC4_SIO_IR_S0_DELTA_DCD        0x00000010 /* Port 0 delta DCD */
236
#define IOC4_SIO_IR_S0_DELTA_CTS        0x00000020 /* Port 0 delta CTS */
237
#define IOC4_SIO_IR_S0_INT              0x00000040 /* Port 0 pass-thru intr */
238
#define IOC4_SIO_IR_S0_TX_EXPLICIT      0x00000080 /* Port 0 explicit TX thru */
239
#define IOC4_SIO_IR_S1_TX_MT            0x00000100 /* Serial port 1 */
240
#define IOC4_SIO_IR_S1_RX_FULL          0x00000200 /* */
241
#define IOC4_SIO_IR_S1_RX_HIGH          0x00000400 /* */
242
#define IOC4_SIO_IR_S1_RX_TIMER         0x00000800 /* */
243
#define IOC4_SIO_IR_S1_DELTA_DCD        0x00001000 /* */
244
#define IOC4_SIO_IR_S1_DELTA_CTS        0x00002000 /* */
245
#define IOC4_SIO_IR_S1_INT              0x00004000 /* */
246
#define IOC4_SIO_IR_S1_TX_EXPLICIT      0x00008000 /* */
247
#define IOC4_SIO_IR_S2_TX_MT            0x00010000 /* Serial port 2 */
248
#define IOC4_SIO_IR_S2_RX_FULL          0x00020000 /* */
249
#define IOC4_SIO_IR_S2_RX_HIGH          0x00040000 /* */
250
#define IOC4_SIO_IR_S2_RX_TIMER         0x00080000 /* */
251
#define IOC4_SIO_IR_S2_DELTA_DCD        0x00100000 /* */
252
#define IOC4_SIO_IR_S2_DELTA_CTS        0x00200000 /* */
253
#define IOC4_SIO_IR_S2_INT              0x00400000 /* */
254
#define IOC4_SIO_IR_S2_TX_EXPLICIT      0x00800000 /* */
255
#define IOC4_SIO_IR_S3_TX_MT            0x01000000 /* Serial port 3 */
256
#define IOC4_SIO_IR_S3_RX_FULL          0x02000000 /* */
257
#define IOC4_SIO_IR_S3_RX_HIGH          0x04000000 /* */
258
#define IOC4_SIO_IR_S3_RX_TIMER         0x08000000 /* */
259
#define IOC4_SIO_IR_S3_DELTA_DCD        0x10000000 /* */
260
#define IOC4_SIO_IR_S3_DELTA_CTS        0x20000000 /* */
261
#define IOC4_SIO_IR_S3_INT              0x40000000 /* */
262
#define IOC4_SIO_IR_S3_TX_EXPLICIT      0x80000000 /* */
263
 
264
/* Per device interrupt masks */
265
#define IOC4_SIO_IR_S0          (IOC4_SIO_IR_S0_TX_MT | \
266
                                 IOC4_SIO_IR_S0_RX_FULL | \
267
                                 IOC4_SIO_IR_S0_RX_HIGH | \
268
                                 IOC4_SIO_IR_S0_RX_TIMER | \
269
                                 IOC4_SIO_IR_S0_DELTA_DCD | \
270
                                 IOC4_SIO_IR_S0_DELTA_CTS | \
271
                                 IOC4_SIO_IR_S0_INT | \
272
                                 IOC4_SIO_IR_S0_TX_EXPLICIT)
273
#define IOC4_SIO_IR_S1          (IOC4_SIO_IR_S1_TX_MT | \
274
                                 IOC4_SIO_IR_S1_RX_FULL | \
275
                                 IOC4_SIO_IR_S1_RX_HIGH | \
276
                                 IOC4_SIO_IR_S1_RX_TIMER | \
277
                                 IOC4_SIO_IR_S1_DELTA_DCD | \
278
                                 IOC4_SIO_IR_S1_DELTA_CTS | \
279
                                 IOC4_SIO_IR_S1_INT | \
280
                                 IOC4_SIO_IR_S1_TX_EXPLICIT)
281
#define IOC4_SIO_IR_S2          (IOC4_SIO_IR_S2_TX_MT | \
282
                                 IOC4_SIO_IR_S2_RX_FULL | \
283
                                 IOC4_SIO_IR_S2_RX_HIGH | \
284
                                 IOC4_SIO_IR_S2_RX_TIMER | \
285
                                 IOC4_SIO_IR_S2_DELTA_DCD | \
286
                                 IOC4_SIO_IR_S2_DELTA_CTS | \
287
                                 IOC4_SIO_IR_S2_INT | \
288
                                 IOC4_SIO_IR_S2_TX_EXPLICIT)
289
#define IOC4_SIO_IR_S3          (IOC4_SIO_IR_S3_TX_MT | \
290
                                 IOC4_SIO_IR_S3_RX_FULL | \
291
                                 IOC4_SIO_IR_S3_RX_HIGH | \
292
                                 IOC4_SIO_IR_S3_RX_TIMER | \
293
                                 IOC4_SIO_IR_S3_DELTA_DCD | \
294
                                 IOC4_SIO_IR_S3_DELTA_CTS | \
295
                                 IOC4_SIO_IR_S3_INT | \
296
                                 IOC4_SIO_IR_S3_TX_EXPLICIT)
297
 
298
/* Bitmasks for IOC4_OTHER_IR, IOC4_OTHER_IEC, and IOC4_OTHER_IES  */
299
#define IOC4_OTHER_IR_ATA_INT           0x00000001 /* ATAPI intr pass-thru */
300
#define IOC4_OTHER_IR_ATA_MEMERR        0x00000002 /* ATAPI DMA PCI error */
301
#define IOC4_OTHER_IR_S0_MEMERR         0x00000004 /* Port 0 PCI error */
302
#define IOC4_OTHER_IR_S1_MEMERR         0x00000008 /* Port 1 PCI error */
303
#define IOC4_OTHER_IR_S2_MEMERR         0x00000010 /* Port 2 PCI error */
304
#define IOC4_OTHER_IR_S3_MEMERR         0x00000020 /* Port 3 PCI error */
305
#define IOC4_OTHER_IR_KBD_INT           0x00000040 /* Kbd/mouse intr */
306
#define IOC4_OTHER_IR_ATA_DMAINT        0x00000089 /* ATAPI DMA intr */
307
#define IOC4_OTHER_IR_RT_INT            0x00800000 /* RT output pulse */
308
#define IOC4_OTHER_IR_GEN_INT1          0x02000000 /* RT input pulse */
309
#define IOC4_OTHER_IR_GEN_INT_SHIFT             25
310
 
311
/* Per device interrupt masks */
312
#define IOC4_OTHER_IR_ATA       (IOC4_OTHER_IR_ATA_INT | \
313
                                 IOC4_OTHER_IR_ATA_MEMERR | \
314
                                 IOC4_OTHER_IR_ATA_DMAINT)
315
#define IOC4_OTHER_IR_RT        (IOC4_OTHER_IR_RT_INT | IOC4_OTHER_IR_GEN_INT1)
316
 
317
/* Macro to load pending interrupts */
318
#define IOC4_PENDING_SIO_INTRS(mem)     (PCI_INW(&((mem)->sio_ir)) & \
319
                                         PCI_INW(&((mem)->sio_ies_ro)))
320
#define IOC4_PENDING_OTHER_INTRS(mem)   (PCI_INW(&((mem)->other_ir)) & \
321
                                         PCI_INW(&((mem)->other_ies_ro)))
322
 
323
/* Bitmasks for IOC4_SIO_CR */
324
#define IOC4_SIO_SR_CMD_PULSE           0x00000004 /* Byte bus strobe length */
325
#define IOC4_SIO_CR_CMD_PULSE_SHIFT              0
326
#define IOC4_SIO_CR_ARB_DIAG            0x00000070 /* Current non-ATA PCI bus
327
                                                      requester (ro) */
328
#define IOC4_SIO_CR_ARB_DIAG_TX0        0x00000000
329
#define IOC4_SIO_CR_ARB_DIAG_RX0        0x00000010
330
#define IOC4_SIO_CR_ARB_DIAG_TX1        0x00000020
331
#define IOC4_SIO_CR_ARB_DIAG_RX1        0x00000030
332
#define IOC4_SIO_CR_ARB_DIAG_TX2        0x00000040
333
#define IOC4_SIO_CR_ARB_DIAG_RX2        0x00000050
334
#define IOC4_SIO_CR_ARB_DIAG_TX3        0x00000060
335
#define IOC4_SIO_CR_ARB_DIAG_RX3        0x00000070
336
#define IOC4_SIO_CR_SIO_DIAG_IDLE       0x00000080 /* 0 -> active request among
337
                                                      serial ports (ro) */
338
#define IOC4_SIO_CR_ATA_DIAG_IDLE       0x00000100 /* 0 -> active request from
339
                                                      ATA port */
340
#define IOC4_SIO_CR_ATA_DIAG_ACTIVE     0x00000200 /* 1 -> ATA request is winner */ 
341
 
342
/* Bitmasks for IOC4_INT_OUT */
343
#define IOC4_INT_OUT_COUNT              0x0000ffff /* Pulse interval timer */
344
#define IOC4_INT_OUT_MODE               0x00070000 /* Mode mask */
345
#define IOC4_INT_OUT_MODE_0             0x00000000 /* Set output to 0 */
346
#define IOC4_INT_OUT_MODE_1             0x00040000 /* Set output to 1 */
347
#define IOC4_INT_OUT_MODE_1PULSE        0x00050000 /* Send 1 pulse */
348
#define IOC4_INT_OUT_MODE_PULSES        0x00060000 /* Send 1 pulse every interval */
349
#define IOC4_INT_OUT_MODE_SQW           0x00070000 /* Toggle output every interval */
350
#define IOC4_INT_OUT_DIAG               0x40000000 /* Diag mode */
351
#define IOC4_INT_OUT_INT_OUT            0x80000000 /* Current state of INT_OUT */
352
 
353
/* Time constants for IOC4_INT_OUT */
354
#define IOC4_INT_OUT_NS_PER_TICK        (15 * 520) /* 15 ns PCI clock, multi=520 */
355
#define IOC4_INT_OUT_TICKS_PER_PULSE             3 /* Outgoing pulse lasts 3
356
                                                      ticks */
357
#define IOC4_INT_OUT_US_TO_COUNT(x)                /* Convert uS to a count value */ \
358
        (((x) * 10 + IOC4_INT_OUT_NS_PER_TICK / 200) *  \
359
         100 / IOC4_INT_OUT_NS_PER_TICK - 1)
360
#define IOC4_INT_OUT_COUNT_TO_US(x)                /* Convert count value to uS */ \
361
        (((x) + 1) * IOC4_INT_OUT_NS_PER_TICK / 1000)
362
#define IOC4_INT_OUT_MIN_TICKS                   3 /* Min period is width of
363
                                                      pulse in "ticks" */
364
#define IOC4_INT_OUT_MAX_TICKS  IOC4_INT_OUT_COUNT /* Largest possible count */
365
 
366
/* Bitmasks for IOC4_GPCR */
367
#define IOC4_GPCR_DIR                   0x000000ff /* Tristate pin in or out */
368
#define IOC4_GPCR_DIR_PIN(x)              (1<<(x)) /* Access one of the DIR bits */
369
#define IOC4_GPCR_EDGE                  0x0000ff00 /* Extint edge or level
370
                                                      sensitive */
371
#define IOC4_GPCR_EDGE_PIN(x)        (1<<((x)+7 )) /* Access one of the EDGE bits */
372
 
373
/* Values for IOC4_GPCR */
374
#define IOC4_GPCR_INT_OUT_EN            0x00100000 /* Enable INT_OUT to pin 0 */
375
#define IOC4_GPCR_DIR_SER0_XCVR         0x00000010 /* Port 0 Transceiver select
376
                                                      enable */
377
#define IOC4_GPCR_DIR_SER1_XCVR         0x00000020 /* Port 1 Transceiver select
378
                                                      enable */
379
#define IOC4_GPCR_DIR_SER2_XCVR         0x00000040 /* Port 2 Transceiver select
380
                                                      enable */
381
#define IOC4_GPCR_DIR_SER3_XCVR         0x00000080 /* Port 3 Transceiver select
382
                                                      enable */
383
 
384
/* Defs for some of the generic I/O pins */
385
#define IOC4_GPCR_UART0_MODESEL               0x10 /* Pin is output to port 0
386
                                                      mode sel */
387
#define IOC4_GPCR_UART1_MODESEL               0x20 /* Pin is output to port 1
388
                                                      mode sel */
389
#define IOC4_GPCR_UART2_MODESEL               0x40 /* Pin is output to port 2
390
                                                      mode sel */
391
#define IOC4_GPCR_UART3_MODESEL               0x80 /* Pin is output to port 3
392
                                                      mode sel */
393
 
394
#define IOC4_GPPR_UART0_MODESEL_PIN              4 /* GIO pin controlling
395
                                                      uart 0 mode select */
396
#define IOC4_GPPR_UART1_MODESEL_PIN              5 /* GIO pin controlling
397
                                                      uart 1 mode select */
398
#define IOC4_GPPR_UART2_MODESEL_PIN              6 /* GIO pin controlling
399
                                                      uart 2 mode select */
400
#define IOC4_GPPR_UART3_MODESEL_PIN              7 /* GIO pin controlling
401
                                                      uart 3 mode select */
402
 
403
/* Bitmasks for IOC4_ATA_TIMING */
404
#define IOC4_ATA_TIMING_ADR_SETUP       0x00000003 /* Clocks of addr set-up */
405
#define IOC4_ATA_TIMING_PULSE_WIDTH     0x000001f8 /* Clocks of read or write
406
                                                      pulse width */
407
#define IOC4_ATA_TIMING_RECOVERY        0x0000fe00 /* Clocks before next read
408
                                                      or write */
409
#define IOC4_ATA_TIMING_USE_IORDY       0x00010000 /* PIO uses IORDY */
410
 
411
/* Bitmasks for address list elements pointed to by IOC4_ATA_DMA_PTR_<L|H> */
412
#define IOC4_ATA_ALE_DMA_ADDRESS        0xfffffffffffffffe
413
 
414
/* Bitmasks for byte count list elements pointed to by IOC4_ATA_DMA_PTR_<L|H> */
415
#define IOC4_ATA_BCLE_BYTE_COUNT        0x000000000000fffe
416
#define IOC4_ATA_BCLE_LIST_END          0x0000000080000000
417
 
418
/* Bitmasks for IOC4_ATA_BC_<DEV|MEM> */
419
#define IOC4_ATA_BC_BYTE_CNT            0x0001fffe /* Byte count */
420
 
421
/* Bitmasks for IOC4_ATA_DMA_CTRL */
422
#define IOC4_ATA_DMA_CTRL_STRAT         0x00000001 /* 1 -> start DMA engine */
423
#define IOC4_ATA_DMA_CTRL_STOP          0x00000002 /* 1 -> stop DMA engine */
424
#define IOC4_ATA_DMA_CTRL_DIR           0x00000004 /* 1 -> ATA bus data copied
425
                                                      to memory */
426
#define IOC4_ATA_DMA_CTRL_ACTIVE        0x00000008 /* DMA channel is active */
427
#define IOC4_ATA_DMA_CTRL_MEM_ERROR     0x00000010 /* DMA engine encountered 
428
                                                      a PCI error */
429
/* Bitmasks for IOC4_KM_CSR */
430
#define IOC4_KM_CSR_K_WRT_PEND  0x00000001 /* Kbd port xmitting or resetting */
431
#define IOC4_KM_CSR_M_WRT_PEND  0x00000002 /* Mouse port xmitting or resetting */
432
#define IOC4_KM_CSR_K_LCB       0x00000004 /* Line Cntrl Bit for last KBD write */
433
#define IOC4_KM_CSR_M_LCB       0x00000008 /* Same for mouse */
434
#define IOC4_KM_CSR_K_DATA      0x00000010 /* State of kbd data line */
435
#define IOC4_KM_CSR_K_CLK       0x00000020 /* State of kbd clock line */
436
#define IOC4_KM_CSR_K_PULL_DATA 0x00000040 /* Pull kbd data line low */
437
#define IOC4_KM_CSR_K_PULL_CLK  0x00000080 /* Pull kbd clock line low */
438
#define IOC4_KM_CSR_M_DATA      0x00000100 /* State of mouse data line */
439
#define IOC4_KM_CSR_M_CLK       0x00000200 /* State of mouse clock line */
440
#define IOC4_KM_CSR_M_PULL_DATA 0x00000400 /* Pull mouse data line low */
441
#define IOC4_KM_CSR_M_PULL_CLK  0x00000800 /* Pull mouse clock line low */
442
#define IOC4_KM_CSR_EMM_MODE    0x00001000 /* Emulation mode */
443
#define IOC4_KM_CSR_SIM_MODE    0x00002000 /* Clock X8 */
444
#define IOC4_KM_CSR_K_SM_IDLE   0x00004000 /* Keyboard is idle */
445
#define IOC4_KM_CSR_M_SM_IDLE   0x00008000 /* Mouse is idle */
446
#define IOC4_KM_CSR_K_TO        0x00010000 /* Keyboard trying to send/receive */
447
#define IOC4_KM_CSR_M_TO        0x00020000 /* Mouse trying to send/receive */
448
#define IOC4_KM_CSR_K_TO_EN     0x00040000 /* KM_CSR_K_TO + KM_CSR_K_TO_EN =
449
                                              cause SIO_IR to assert */
450
#define IOC4_KM_CSR_M_TO_EN     0x00080000 /* KM_CSR_M_TO + KM_CSR_M_TO_EN =
451
                                              cause SIO_IR to assert */
452
#define IOC4_KM_CSR_K_CLAMP_ONE 0x00100000 /* Pull K_CLK low after rec. one char */
453
#define IOC4_KM_CSR_M_CLAMP_ONE 0x00200000 /* Pull M_CLK low after rec. one char */
454
#define IOC4_KM_CSR_K_CLAMP_THREE \
455
                                0x00400000 /* Pull K_CLK low after rec. three chars */
456
#define IOC4_KM_CSR_M_CLAMP_THREE \
457
                                0x00800000 /* Pull M_CLK low after rec. three char */
458
 
459
/* Bitmasks for IOC4_K_RD and IOC4_M_RD */
460
#define IOC4_KM_RD_DATA_2       0x000000ff /* 3rd char recvd since last read */
461
#define IOC4_KM_RD_DATA_2_SHIFT          0
462
#define IOC4_KM_RD_DATA_1       0x0000ff00 /* 2nd char recvd since last read */
463
#define IOC4_KM_RD_DATA_1_SHIFT          8
464
#define IOC4_KM_RD_DATA_0       0x00ff0000 /* 1st char recvd since last read */
465
#define IOC4_KM_RD_DATA_0_SHIFT         16
466
#define IOC4_KM_RD_FRAME_ERR_2  0x01000000 /* Framing or parity error in byte 2 */
467
#define IOC4_KM_RD_FRAME_ERR_1  0x02000000 /* Same for byte 1 */
468
#define IOC4_KM_RD_FRAME_ERR_0  0x04000000 /* Same for byte 0 */
469
 
470
#define IOC4_KM_RD_KBD_MSE      0x08000000 /* 0 if from kbd, 1 if from mouse */
471
#define IOC4_KM_RD_OFLO         0x10000000 /* 4th char recvd before this read */
472
#define IOC4_KM_RD_VALID_2      0x20000000 /* DATA_2 valid */
473
#define IOC4_KM_RD_VALID_1      0x40000000 /* DATA_1 valid */
474
#define IOC4_KM_RD_VALID_0      0x80000000 /* DATA_0 valid */
475
#define IOC4_KM_RD_VALID_ALL    (IOC4_KM_RD_VALID_0 | IOC4_KM_RD_VALID_1 | \
476
                                 IOC4_KM_RD_VALID_2)
477
 
478
/* Bitmasks for IOC4_K_WD & IOC4_M_WD */
479
#define IOC4_KM_WD_WRT_DATA     0x000000ff /* Write to keyboard/mouse port */
480
#define IOC4_KM_WD_WRT_DATA_SHIFT        0
481
 
482
/* Bitmasks for serial RX status byte */
483
#define IOC4_RXSB_OVERRUN       0x01       /* Char(s) lost */
484
#define IOC4_RXSB_PAR_ERR       0x02       /* Parity error */
485
#define IOC4_RXSB_FRAME_ERR     0x04       /* Framing error */
486
#define IOC4_RXSB_BREAK         0x08       /* Break character */
487
#define IOC4_RXSB_CTS           0x10       /* State of CTS */
488
#define IOC4_RXSB_DCD           0x20       /* State of DCD */
489
#define IOC4_RXSB_MODEM_VALID   0x40       /* DCD, CTS, and OVERRUN are valid */
490
#define IOC4_RXSB_DATA_VALID    0x80       /* Data byte, FRAME_ERR PAR_ERR & BREAK valid */
491
 
492
/* Bitmasks for serial TX control byte */
493
#define IOC4_TXCB_INT_WHEN_DONE 0x20       /* Interrupt after this byte is sent */
494
#define IOC4_TXCB_INVALID       0x00       /* Byte is invalid */
495
#define IOC4_TXCB_VALID         0x40       /* Byte is valid */
496
#define IOC4_TXCB_MCR           0x80       /* Data<7:0> to modem control register */
497
#define IOC4_TXCB_DELAY         0xc0       /* Delay data<7:0> mSec */
498
 
499
/* Bitmasks for IOC4_SBBR_L */
500
#define IOC4_SBBR_L_SIZE        0x00000001 /* 0 == 1KB rings, 1 == 4KB rings */
501
#define IOC4_SBBR_L_BASE        0xfffff000 /* Lower serial ring base addr */
502
 
503
/* Bitmasks for IOC4_SSCR_<3:0> */
504
#define IOC4_SSCR_RX_THRESHOLD  0x000001ff /* Hiwater mark */
505
#define IOC4_SSCR_TX_TIMER_BUSY 0x00010000 /* TX timer in progress */
506
#define IOC4_SSCR_HFC_EN        0x00020000 /* Hardware flow control enabled */
507
#define IOC4_SSCR_RX_RING_DCD   0x00040000 /* Post RX record on delta-DCD */
508
#define IOC4_SSCR_RX_RING_CTS   0x00080000 /* Post RX record on delta-CTS */
509
#define IOC4_SSCR_DIAG          0x00200000 /* Bypass clock divider for sim */
510
#define IOC4_SSCR_RX_DRAIN      0x08000000 /* Drain RX buffer to memory */
511
#define IOC4_SSCR_DMA_EN        0x10000000 /* Enable ring buffer DMA */
512
#define IOC4_SSCR_DMA_PAUSE     0x20000000 /* Pause DMA */
513
#define IOC4_SSCR_PAUSE_STATE   0x40000000 /* Sets when PAUSE takes effect */
514
#define IOC4_SSCR_RESET         0x80000000 /* Reset DMA channels */
515
 
516
/* All producer/comsumer pointers are the same bitfield */
517
#define IOC4_PROD_CONS_PTR_4K   0x00000ff8 /* For 4K buffers */
518
#define IOC4_PROD_CONS_PTR_1K   0x000003f8 /* For 1K buffers */
519
#define IOC4_PROD_CONS_PTR_OFF           3
520
 
521
/* Bitmasks for IOC4_STPIR_<3:0> */
522
/* Reserved for future register definitions */
523
 
524
/* Bitmasks for IOC4_STCIR_<3:0> */
525
#define IOC4_STCIR_BYTE_CNT     0x0f000000 /* Bytes in unpacker */
526
#define IOC4_STCIR_BYTE_CNT_SHIFT       24
527
 
528
/* Bitmasks for IOC4_SRPIR_<3:0> */
529
#define IOC4_SRPIR_BYTE_CNT     0x0f000000 /* Bytes in packer */
530
#define IOC4_SRPIR_BYTE_CNT_SHIFT       24
531
 
532
/* Bitmasks for IOC4_SRCIR_<3:0> */
533
#define IOC4_SRCIR_ARM          0x80000000 /* Arm RX timer */
534
 
535
/* Bitmasks for IOC4_SHADOW_<3:0> */
536
#define IOC4_SHADOW_DR          0x00000001  /* Data ready */
537
#define IOC4_SHADOW_OE          0x00000002  /* Overrun error */
538
#define IOC4_SHADOW_PE          0x00000004  /* Parity error */
539
#define IOC4_SHADOW_FE          0x00000008  /* Framing error */
540
#define IOC4_SHADOW_BI          0x00000010  /* Break interrupt */
541
#define IOC4_SHADOW_THRE        0x00000020  /* Xmit holding register empty */
542
#define IOC4_SHADOW_TEMT        0x00000040  /* Xmit shift register empty */
543
#define IOC4_SHADOW_RFCE        0x00000080  /* Char in RX fifo has an error */
544
#define IOC4_SHADOW_DCTS        0x00010000  /* Delta clear to send */
545
#define IOC4_SHADOW_DDCD        0x00080000  /* Delta data carrier detect */
546
#define IOC4_SHADOW_CTS         0x00100000  /* Clear to send */
547
#define IOC4_SHADOW_DCD         0x00800000  /* Data carrier detect */
548
#define IOC4_SHADOW_DTR         0x01000000  /* Data terminal ready */
549
#define IOC4_SHADOW_RTS         0x02000000  /* Request to send */
550
#define IOC4_SHADOW_OUT1        0x04000000  /* 16550 OUT1 bit */
551
#define IOC4_SHADOW_OUT2        0x08000000  /* 16550 OUT2 bit */
552
#define IOC4_SHADOW_LOOP        0x10000000  /* Loopback enabled */
553
 
554
/* Bitmasks for IOC4_SRTR_<3:0> */
555
#define IOC4_SRTR_CNT           0x00000fff /* Reload value for RX timer */
556
#define IOC4_SRTR_CNT_VAL       0x0fff0000 /* Current value of RX timer */
557
#define IOC4_SRTR_CNT_VAL_SHIFT         16
558
#define IOC4_SRTR_HZ                 16000 /* SRTR clock frequency */
559
 
560
/* Serial port register map used for DMA and PIO serial I/O */
561
typedef volatile struct ioc4_serialregs {
562
    ioc4reg_t               sscr;
563
    ioc4reg_t               stpir;
564
    ioc4reg_t               stcir;
565
    ioc4reg_t               srpir;
566
    ioc4reg_t               srcir;
567
    ioc4reg_t               srtr;
568
    ioc4reg_t               shadow;
569
} ioc4_sregs_t;
570
 
571
/* IOC4 UART register map */
572
typedef volatile struct ioc4_uartregs {
573
    char                    i4u_lcr;
574
    union {
575
        char                    iir;    /* read only */
576
        char                    fcr;    /* write only */
577
    } u3;
578
    union {
579
        char                    ier;    /* DLAB == 0 */
580
        char                    dlm;    /* DLAB == 1 */
581
    } u2;
582
    union {
583
        char                    rbr;    /* read only, DLAB == 0 */
584
        char                    thr;    /* write only, DLAB == 0 */
585
        char                    dll;    /* DLAB == 1 */
586
    } u1;
587
    char                    i4u_scr;
588
    char                    i4u_msr;
589
    char                    i4u_lsr;
590
    char                    i4u_mcr;
591
} ioc4_uart_t;
592
 
593
 
594
#define i4u_rbr u1.rbr
595
#define i4u_thr u1.thr
596
#define i4u_dll u1.dll
597
#define i4u_ier u2.ier
598
#define i4u_dlm u2.dlm
599
#define i4u_iir u3.iir
600
#define i4u_fcr u3.fcr
601
 
602
/* PCI config space register map */
603
typedef volatile struct ioc4_configregs {
604
    ioc4reg_t               pci_id;
605
    ioc4reg_t               pci_scr;
606
    ioc4reg_t               pci_rev;
607
    ioc4reg_t               pci_lat;
608
    ioc4reg_t               pci_bar0;
609
    ioc4reg_t               pci_bar1;
610
    ioc4reg_t               pci_bar2_not_implemented;
611
    ioc4reg_t               pci_cis_ptr_not_implemented;
612
    ioc4reg_t               pci_sidv;
613
    ioc4reg_t               pci_rom_bar_not_implemented;
614
    ioc4reg_t               pci_cap;
615
    ioc4reg_t               pci_rsv;
616
    ioc4reg_t               pci_latgntint;
617
 
618
    char                    pci_fill1[0x58 - 0x3c - 4];
619
 
620
    ioc4reg_t               pci_pcix;
621
    ioc4reg_t               pci_pcixstatus;
622
} ioc4_cfg_t;
623
 
624
/* PCI memory space register map addressed using pci_bar0 */
625
typedef volatile struct ioc4_memregs {
626
 
627
    /* Miscellaneous IOC4  registers */
628
    ioc4reg_t               pci_err_addr_l;
629
    ioc4reg_t               pci_err_addr_h;
630
    ioc4reg_t               sio_ir;
631
    ioc4reg_t               other_ir;
632
 
633
    /* These registers are read-only for general kernel code.  To
634
     * modify them use the functions in ioc4.c.
635
     */
636
    ioc4reg_t               sio_ies_ro;
637
    ioc4reg_t               other_ies_ro;
638
    ioc4reg_t               sio_iec_ro;
639
    ioc4reg_t               other_iec_ro;
640
    ioc4reg_t               sio_cr;
641
    ioc4reg_t               misc_fill1;
642
    ioc4reg_t               int_out;
643
    ioc4reg_t               misc_fill2;
644
    ioc4reg_t               gpcr_s;
645
    ioc4reg_t               gpcr_c;
646
    ioc4reg_t               gpdr;
647
    ioc4reg_t               misc_fill3;
648
    ioc4reg_t               gppr_0;
649
    ioc4reg_t               gppr_1;
650
    ioc4reg_t               gppr_2;
651
    ioc4reg_t               gppr_3;
652
    ioc4reg_t               gppr_4;
653
    ioc4reg_t               gppr_5;
654
    ioc4reg_t               gppr_6;
655
    ioc4reg_t               gppr_7;
656
 
657
    char                    misc_fill4[0x100 - 0x5C - 4];
658
 
659
    /* ATA/ATAP registers */
660
    ioc4reg_t               ata_0;
661
    ioc4reg_t               ata_1;
662
    ioc4reg_t               ata_2;
663
    ioc4reg_t               ata_3;
664
    ioc4reg_t               ata_4;
665
    ioc4reg_t               ata_5;
666
    ioc4reg_t               ata_6;
667
    ioc4reg_t               ata_7;
668
    ioc4reg_t               ata_aux;
669
 
670
    char                    ata_fill1[0x140 - 0x120 - 4];
671
 
672
    ioc4reg_t               ata_timing;
673
    ioc4reg_t               ata_dma_ptr_l;
674
    ioc4reg_t               ata_dma_ptr_h;
675
    ioc4reg_t               ata_dma_addr_l;
676
    ioc4reg_t               ata_dma_addr_h;
677
    ioc4reg_t               ata_bc_dev;
678
    ioc4reg_t               ata_bc_mem;
679
    ioc4reg_t               ata_dma_ctrl;
680
 
681
    char                    ata_fill2[0x200 - 0x15C - 4];
682
 
683
    /* Keyboard and mouse registers */
684
    ioc4reg_t               km_csr;
685
    ioc4reg_t               k_rd;
686
    ioc4reg_t               m_rd;
687
    ioc4reg_t               k_wd;
688
    ioc4reg_t               m_wd;
689
 
690
    char                    km_fill1[0x300 - 0x210 - 4];
691
 
692
    /* Serial port registers used for DMA serial I/O */
693
    ioc4reg_t               sbbr01_l;
694
    ioc4reg_t               sbbr01_h;
695
    ioc4reg_t               sbbr23_l;
696
    ioc4reg_t               sbbr23_h;
697
 
698
    ioc4_sregs_t            port_0;
699
    ioc4_sregs_t            port_1;
700
    ioc4_sregs_t            port_2;
701
    ioc4_sregs_t            port_3;
702
 
703
    ioc4_uart_t             uart_0;
704
    ioc4_uart_t             uart_1;
705
    ioc4_uart_t             uart_2;
706
    ioc4_uart_t             uart_3;
707
} ioc4_mem_t;
708
 
709
 
710
/*
711
 * Bytebus device space
712
 */
713
#define IOC4_BYTEBUS_DEV0       0x80000L  /* Addressed using pci_bar0 */ 
714
#define IOC4_BYTEBUS_DEV1       0xA0000L  /* Addressed using pci_bar0 */
715
#define IOC4_BYTEBUS_DEV2       0xC0000L  /* Addressed using pci_bar0 */
716
#define IOC4_BYTEBUS_DEV3       0xE0000L  /* Addressed using pci_bar0 */
717
 
718
/* UART clock speed */
719
#define IOC4_SER_XIN_CLK        66000000
720
 
721
typedef enum ioc4_subdevs_e {
722
    ioc4_subdev_generic,
723
    ioc4_subdev_kbms,
724
    ioc4_subdev_tty0,
725
    ioc4_subdev_tty1,
726
    ioc4_subdev_tty2,
727
    ioc4_subdev_tty3,
728
    ioc4_subdev_rt,
729
    ioc4_nsubdevs
730
} ioc4_subdev_t;
731
 
732
/* Subdevice disable bits,
733
 * from the standard INFO_LBL_SUBDEVS
734
 */
735
#define IOC4_SDB_TTY0           (1 << ioc4_subdev_tty0)
736
#define IOC4_SDB_TTY1           (1 << ioc4_subdev_tty1)
737
#define IOC4_SDB_TTY2           (1 << ioc4_subdev_tty2)
738
#define IOC4_SDB_TTY3           (1 << ioc4_subdev_tty3)
739
#define IOC4_SDB_KBMS           (1 << ioc4_subdev_kbms)
740
#define IOC4_SDB_RT             (1 << ioc4_subdev_rt)
741
#define IOC4_SDB_GENERIC        (1 << ioc4_subdev_generic)
742
 
743
#define IOC4_ALL_SUBDEVS        ((1 << ioc4_nsubdevs) - 1)
744
 
745
#define IOC4_SDB_SERIAL         (IOC4_SDB_TTY0 | IOC4_SDB_TTY1 | IOC4_SDB_TTY2 | IOC4_SDB_TTY3)
746
 
747
#define IOC4_STD_SUBDEVS        IOC4_ALL_SUBDEVS
748
 
749
#define IOC4_INTA_SUBDEVS       (IOC4_SDB_SERIAL | IOC4_SDB_KBMS | IOC4_SDB_RT | IOC4_SDB_GENERIC)
750
 
751
extern int              ioc4_subdev_enabled(vertex_hdl_t, ioc4_subdev_t);
752
extern void             ioc4_subdev_enables(vertex_hdl_t, uint64_t);
753
extern void             ioc4_subdev_enable(vertex_hdl_t, ioc4_subdev_t);
754
extern void             ioc4_subdev_disable(vertex_hdl_t, ioc4_subdev_t);
755
 
756
/* Macros to read and write the SIO_IEC and SIO_IES registers (see the
757
 * comments in ioc4.c for details on why this is necessary
758
 */
759
#define IOC4_W_IES      0
760
#define IOC4_W_IEC      1
761
extern void             ioc4_write_ireg(void *, ioc4reg_t, int, ioc4_intr_type_t);
762
 
763
#define IOC4_WRITE_IES(ioc4, val, type) ioc4_write_ireg(ioc4, val, IOC4_W_IES, type)
764
#define IOC4_WRITE_IEC(ioc4, val, type) ioc4_write_ireg(ioc4, val, IOC4_W_IEC, type)
765
 
766
typedef void
767
ioc4_intr_func_f        (intr_arg_t, ioc4reg_t);
768
 
769
typedef void
770
ioc4_intr_connect_f     (struct pci_dev *conn_vhdl,
771
                         ioc4_intr_type_t,
772
                         ioc4reg_t,
773
                         ioc4_intr_func_f *,
774
                         intr_arg_t info,
775
                         vertex_hdl_t owner_vhdl,
776
                         vertex_hdl_t intr_dev_vhdl,
777
                         int (*)(intr_arg_t));
778
 
779
typedef void
780
ioc4_intr_disconnect_f  (vertex_hdl_t conn_vhdl,
781
                         ioc4_intr_type_t,
782
                         ioc4reg_t,
783
                         ioc4_intr_func_f *,
784
                         intr_arg_t info,
785
                         vertex_hdl_t owner_vhdl);
786
 
787
void ioc4_intr_connect(vertex_hdl_t, ioc4_intr_type_t, ioc4reg_t,
788
                  ioc4_intr_func_f *, intr_arg_t, vertex_hdl_t,
789
                  vertex_hdl_t);
790
 
791
extern int              ioc4_is_console(vertex_hdl_t conn_vhdl);
792
 
793
extern void             ioc4_mlreset(ioc4_cfg_t *, ioc4_mem_t *);
794
 
795
 
796
extern ioc4_mem_t      *ioc4_mem_ptr(void *ioc4_fastinfo);
797
 
798
typedef ioc4_intr_func_f *ioc4_intr_func_t;
799
 
800
#endif                          /* _ASM_IA64_SN_IOC4_H */

powered by: WebSVN 2.1.0

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