1c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH/*
2c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH	Modified by umesh on 16th may 2001
3c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH	Modified by sarath on 22nd may 2001
4c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH*/
5c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH
6c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH/*
7c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH    comedi/drivers/amcc_s5933_v_58.h
8c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH
9c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH    Stuff for AMCC S5933 PCI Controller
10c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH
11c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH    Author: Michal Dobes <majkl@tesnet.cz>
12c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH
13c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH    Inspirated from general-purpose AMCC S5933 PCI Matchmaker driver
14c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH    made by Andrea Cisternino  <acister@pcape1.pi.infn.it>
15c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH    and as result of espionage from MITE code made by David A. Schleef.
16c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH    Thanks to AMCC for their on-line documentation and bus master DMA
17c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH    example.
18c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH*/
19c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH
20c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#ifndef _AMCC_S5933_H_
21c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define _AMCC_S5933_H_
22c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH
23c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#include <linux/pci.h>
24c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#include "../../comedidev.h"
25c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH
26c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#ifdef PCI_SUPPORT_VER1
27c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#error    Sorry, no support for 2.1.55 and older! :-((((
28c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#endif
29c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH
30c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH/***********Added by sarath for compatibility with APCI3120
31c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH
32c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH*************************/
33c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH
342696fb57e6af653dd8b4df41b16754579f42fc78Bill Pemberton#define FIFO_ADVANCE_ON_BYTE_2     0x20000000	/*  written on base0 */
35c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH
362696fb57e6af653dd8b4df41b16754579f42fc78Bill Pemberton#define AMWEN_ENABLE                     0x02	/*  added for step 6 dma written on base2 */
37c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define A2P_FIFO_WRITE_ENABLE            0x01
38c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH
392696fb57e6af653dd8b4df41b16754579f42fc78Bill Pemberton#define AGCSTS_TC_ENABLE		   0x10000000	/*  Added for transfer count enable bit */
40c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH
412696fb57e6af653dd8b4df41b16754579f42fc78Bill Pemberton/* ADDON RELATED ADDITIONS */
422696fb57e6af653dd8b4df41b16754579f42fc78Bill Pemberton/* Constant */
43c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define     APCI3120_ENABLE_TRANSFER_ADD_ON_LOW       0x00
44c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define     APCI3120_ENABLE_TRANSFER_ADD_ON_HIGH      0x1200
45c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define     APCI3120_A2P_FIFO_MANAGEMENT              0x04000400L
46c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define     APCI3120_AMWEN_ENABLE                     0x02
47c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define     APCI3120_A2P_FIFO_WRITE_ENABLE            0x01
48c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define     APCI3120_FIFO_ADVANCE_ON_BYTE_2           0x20000000L
49c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define     APCI3120_ENABLE_WRITE_TC_INT              0x00004000L
50c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define     APCI3120_CLEAR_WRITE_TC_INT               0x00040000L
51c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define     APCI3120_DISABLE_AMWEN_AND_A2P_FIFO_WRITE 0x0
52c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define     APCI3120_DISABLE_BUS_MASTER_ADD_ON        0x0
53c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define     APCI3120_DISABLE_BUS_MASTER_PCI           0x0
54c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH
552696fb57e6af653dd8b4df41b16754579f42fc78Bill Pemberton /*  ADD_ON ::: this needed since apci supports 16 bit interface to add on */
56c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define     APCI3120_ADD_ON_AGCSTS_LOW       0x3C
57c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define     APCI3120_ADD_ON_AGCSTS_HIGH      APCI3120_ADD_ON_AGCSTS_LOW + 2
58c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define     APCI3120_ADD_ON_MWAR_LOW         0x24
59c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define     APCI3120_ADD_ON_MWAR_HIGH        APCI3120_ADD_ON_MWAR_LOW + 2
60c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define     APCI3120_ADD_ON_MWTC_LOW         0x058
61c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define     APCI3120_ADD_ON_MWTC_HIGH        APCI3120_ADD_ON_MWTC_LOW + 2
62c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH
632696fb57e6af653dd8b4df41b16754579f42fc78Bill Pemberton/* AMCC */
64c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define     APCI3120_AMCC_OP_MCSR            0x3C
65c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define     APCI3120_AMCC_OP_REG_INTCSR      0x38
66c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH
67c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH/*******from here all upward definitions are added by sarath */
68c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH
69c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH/****************************************************************************/
70c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH/* AMCC Operation Register Offsets - PCI                                    */
71c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH/****************************************************************************/
72c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH
73c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define AMCC_OP_REG_OMB1         0x00
74c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define AMCC_OP_REG_OMB2         0x04
75c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define AMCC_OP_REG_OMB3         0x08
76c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define AMCC_OP_REG_OMB4         0x0c
77c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define AMCC_OP_REG_IMB1         0x10
78c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define AMCC_OP_REG_IMB2         0x14
79c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define AMCC_OP_REG_IMB3         0x18
80c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define AMCC_OP_REG_IMB4         0x1c
81c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define AMCC_OP_REG_FIFO         0x20
82c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define AMCC_OP_REG_MWAR         0x24
83c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define AMCC_OP_REG_MWTC         0x28
84c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define AMCC_OP_REG_MRAR         0x2c
85c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define AMCC_OP_REG_MRTC         0x30
86c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define AMCC_OP_REG_MBEF         0x34
87c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define AMCC_OP_REG_INTCSR       0x38
8874b894e56abcb2403894b268100773f4aabe1999Bill Pemberton#define  AMCC_OP_REG_INTCSR_SRC  (AMCC_OP_REG_INTCSR + 2)	/* int source */
89c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define  AMCC_OP_REG_INTCSR_FEC  (AMCC_OP_REG_INTCSR + 3)	/* FIFO ctrl */
90c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define AMCC_OP_REG_MCSR         0x3c
91c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define  AMCC_OP_REG_MCSR_NVDATA (AMCC_OP_REG_MCSR + 2)	/* Data in byte 2 */
92c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define  AMCC_OP_REG_MCSR_NVCMD  (AMCC_OP_REG_MCSR + 3)	/* Command in byte 3 */
93c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH
94c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define AMCC_FIFO_DEPTH_DWORD	8
95c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define AMCC_FIFO_DEPTH_BYTES	(8 * sizeof (u32))
96c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH
97c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH/****************************************************************************/
98c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH/* AMCC Operation Registers Size - PCI                                      */
99c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH/****************************************************************************/
100c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH
101c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define AMCC_OP_REG_SIZE	 64	/* in bytes */
102c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH
103c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH/****************************************************************************/
104c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH/* AMCC Operation Register Offsets - Add-on                                 */
105c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH/****************************************************************************/
106c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH
107c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define AMCC_OP_REG_AIMB1         0x00
108c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define AMCC_OP_REG_AIMB2         0x04
109c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define AMCC_OP_REG_AIMB3         0x08
110c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define AMCC_OP_REG_AIMB4         0x0c
111c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define AMCC_OP_REG_AOMB1         0x10
112c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define AMCC_OP_REG_AOMB2         0x14
113c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define AMCC_OP_REG_AOMB3         0x18
114c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define AMCC_OP_REG_AOMB4         0x1c
115c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define AMCC_OP_REG_AFIFO         0x20
116c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define AMCC_OP_REG_AMWAR         0x24
117c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define AMCC_OP_REG_APTA          0x28
118c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define AMCC_OP_REG_APTD          0x2c
119c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define AMCC_OP_REG_AMRAR         0x30
120c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define AMCC_OP_REG_AMBEF         0x34
121c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define AMCC_OP_REG_AINT          0x38
122c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define AMCC_OP_REG_AGCSTS        0x3c
123c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define AMCC_OP_REG_AMWTC         0x58
124c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define AMCC_OP_REG_AMRTC         0x5c
125c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH
126c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH/****************************************************************************/
127c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH/* AMCC - Add-on General Control/Status Register                            */
128c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH/****************************************************************************/
129c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH
130c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define AGCSTS_CONTROL_MASK	0xfffff000
131c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define  AGCSTS_NV_ACC_MASK	0xe0000000
132c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define  AGCSTS_RESET_MASK	0x0e000000
133c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define  AGCSTS_NV_DA_MASK	0x00ff0000
134c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define  AGCSTS_BIST_MASK	0x0000f000
135c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define AGCSTS_STATUS_MASK	0x000000ff
136c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define  AGCSTS_TCZERO_MASK	0x000000c0
137c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define  AGCSTS_FIFO_ST_MASK	0x0000003f
138c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH
139c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define AGCSTS_RESET_MBFLAGS	0x08000000
140c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define AGCSTS_RESET_P2A_FIFO	0x04000000
141c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define AGCSTS_RESET_A2P_FIFO	0x02000000
142c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define AGCSTS_RESET_FIFOS	(AGCSTS_RESET_A2P_FIFO | AGCSTS_RESET_P2A_FIFO)
143c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH
144c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define AGCSTS_A2P_TCOUNT	0x00000080
145c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define AGCSTS_P2A_TCOUNT	0x00000040
146c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH
147c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define AGCSTS_FS_P2A_EMPTY	0x00000020
148c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define AGCSTS_FS_P2A_HALF	0x00000010
149c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define AGCSTS_FS_P2A_FULL	0x00000008
150c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH
151c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define AGCSTS_FS_A2P_EMPTY	0x00000004
152c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define AGCSTS_FS_A2P_HALF	0x00000002
153c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define AGCSTS_FS_A2P_FULL	0x00000001
154c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH
155c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH/****************************************************************************/
156c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH/* AMCC - Add-on Interrupt Control/Status Register                            */
157c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH/****************************************************************************/
158c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH
159c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define AINT_INT_MASK		0x00ff0000
160c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define AINT_SEL_MASK		0x0000ffff
161c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define  AINT_IS_ENSEL_MASK	0x00001f1f
162c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH
163c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define AINT_INT_ASSERTED	0x00800000
164c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define AINT_BM_ERROR		0x00200000
165c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define AINT_BIST_INT		0x00100000
166c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH
167c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define AINT_RT_COMPLETE	0x00080000
168c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define AINT_WT_COMPLETE	0x00040000
169c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH
170c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define AINT_OUT_MB_INT		0x00020000
171c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define AINT_IN_MB_INT		0x00010000
172c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH
173c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define AINT_READ_COMPL		0x00008000
174c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define AINT_WRITE_COMPL	0x00004000
175c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH
176c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define AINT_OMB_ENABLE 	0x00001000
177c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define AINT_OMB_SELECT 	0x00000c00
178c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define AINT_OMB_BYTE		0x00000300
179c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH
180c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define AINT_IMB_ENABLE 	0x00000010
181c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define AINT_IMB_SELECT 	0x0000000c
182c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define AINT_IMB_BYTE		0x00000003
183c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH
184c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH/* Enable Bus Mastering */
185c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define EN_A2P_TRANSFERS	0x00000400
186c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH/* FIFO Flag Reset */
187c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define RESET_A2P_FLAGS		0x04000000L
188c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH/* FIFO Relative Priority */
189c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define A2P_HI_PRIORITY		0x00000100L
190c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH/* Identify Interrupt Sources */
191c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define ANY_S593X_INT		0x00800000L
192c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define READ_TC_INT		0x00080000L
193c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define WRITE_TC_INT		0x00040000L
194c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define IN_MB_INT		0x00020000L
195c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define MASTER_ABORT_INT	0x00100000L
196c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define TARGET_ABORT_INT	0x00200000L
197c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#define BUS_MASTER_INT		0x00200000L
198c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH
199c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH/****************************************************************************/
200c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH
201c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbHstruct pcilst_struct {
202c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH	struct pcilst_struct *next;
203c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH	int used;
204c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH	struct pci_dev *pcidev;
205c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH	unsigned short vendor;
206c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH	unsigned short device;
207c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH	unsigned int master;
208c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH	unsigned char pci_bus;
209c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH	unsigned char pci_slot;
210c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH	unsigned char pci_func;
211c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH	unsigned int io_addr[5];
212c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH	unsigned int irq;
213c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH};
214c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH
2152696fb57e6af653dd8b4df41b16754579f42fc78Bill Pembertonstruct pcilst_struct *amcc_devices;	/*  ptr to root list of all amcc devices */
216c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH
217c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH/****************************************************************************/
218c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH
219c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbHvoid v_pci_card_list_init(unsigned short pci_vendor, char display);
220c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbHvoid v_pci_card_list_cleanup(unsigned short pci_vendor);
221c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbHstruct pcilst_struct *ptr_find_free_pci_card_by_device(unsigned short vendor_id,
22215d8826a6a2ed954ce7daf1d321cce99d5c12668Greg Kroah-Hartman						       unsigned short
22315d8826a6a2ed954ce7daf1d321cce99d5c12668Greg Kroah-Hartman						       device_id);
224c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbHint i_find_free_pci_card_by_position(unsigned short vendor_id,
22515d8826a6a2ed954ce7daf1d321cce99d5c12668Greg Kroah-Hartman				     unsigned short device_id,
22615d8826a6a2ed954ce7daf1d321cce99d5c12668Greg Kroah-Hartman				     unsigned short pci_bus,
22715d8826a6a2ed954ce7daf1d321cce99d5c12668Greg Kroah-Hartman				     unsigned short pci_slot,
22815d8826a6a2ed954ce7daf1d321cce99d5c12668Greg Kroah-Hartman				     struct pcilst_struct **card);
229c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbHstruct pcilst_struct *ptr_select_and_alloc_pci_card(unsigned short vendor_id,
23015d8826a6a2ed954ce7daf1d321cce99d5c12668Greg Kroah-Hartman						    unsigned short device_id,
23115d8826a6a2ed954ce7daf1d321cce99d5c12668Greg Kroah-Hartman						    unsigned short pci_bus,
23215d8826a6a2ed954ce7daf1d321cce99d5c12668Greg Kroah-Hartman						    unsigned short pci_slot);
233c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH
234c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbHint i_pci_card_alloc(struct pcilst_struct *amcc);
235c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbHint i_pci_card_free(struct pcilst_struct *amcc);
236c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbHvoid v_pci_card_list_display(void);
237c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbHint i_pci_card_data(struct pcilst_struct *amcc,
23815d8826a6a2ed954ce7daf1d321cce99d5c12668Greg Kroah-Hartman		    unsigned char *pci_bus, unsigned char *pci_slot,
23915d8826a6a2ed954ce7daf1d321cce99d5c12668Greg Kroah-Hartman		    unsigned char *pci_func, unsigned short *io_addr,
24015d8826a6a2ed954ce7daf1d321cce99d5c12668Greg Kroah-Hartman		    unsigned short *irq, unsigned short *master);
241c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH
242c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH/****************************************************************************/
243c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH
244c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH/* build list of amcc cards in this system */
245c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbHvoid v_pci_card_list_init(unsigned short pci_vendor, char display)
246c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH{
247c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH	struct pci_dev *pcidev;
248c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH	struct pcilst_struct *amcc, *last;
249c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH	int i;
250c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH
251c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH	amcc_devices = NULL;
252c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH	last = NULL;
253c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH
254c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH	pci_for_each_dev(pcidev) {
255c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH		if (pcidev->vendor == pci_vendor) {
2567a6cb0d5497418599d2125b670926b75e673861cJulia Lawall			amcc = kzalloc(sizeof(*amcc), GFP_KERNEL);
257a2279ae5b58edb7cbe2196d08572fcf59f292354Roel Kluin			if (amcc == NULL)
258a2279ae5b58edb7cbe2196d08572fcf59f292354Roel Kluin				continue;
259a2279ae5b58edb7cbe2196d08572fcf59f292354Roel Kluin
260c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH			amcc->pcidev = pcidev;
261c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH			if (last) {
262c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH				last->next = amcc;
263c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH			} else {
264c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH				amcc_devices = amcc;
265c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH			}
266c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH			last = amcc;
267c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH
268c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH			amcc->vendor = pcidev->vendor;
269c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH			amcc->device = pcidev->device;
270c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#if 0
2712696fb57e6af653dd8b4df41b16754579f42fc78Bill Pemberton			amcc->master = pcidev->master;	/*  how get this information under 2.4 kernels? */
272c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#endif
273c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH			amcc->pci_bus = pcidev->bus->number;
274c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH			amcc->pci_slot = PCI_SLOT(pcidev->devfn);
275c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH			amcc->pci_func = PCI_FUNC(pcidev->devfn);
276c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH			for (i = 0; i < 5; i++)
277c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH				amcc->io_addr[i] =
27815d8826a6a2ed954ce7daf1d321cce99d5c12668Greg Kroah-Hartman				    pcidev->resource[i].start & ~3UL;
279c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH			amcc->irq = pcidev->irq;
280c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH		}
281c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH	}
282c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH
283c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH	if (display)
284c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH		v_pci_card_list_display();
285c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH}
286c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH
287c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH/****************************************************************************/
288c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH/* free up list of amcc cards in this system */
289c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbHvoid v_pci_card_list_cleanup(unsigned short pci_vendor)
290c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH{
291c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH	struct pcilst_struct *amcc, *next;
292c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH
293c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH	for (amcc = amcc_devices; amcc; amcc = next) {
294c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH		next = amcc->next;
295c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH		kfree(amcc);
296c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH	}
297c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH
298c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH	amcc_devices = NULL;
299c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH}
300c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH
301c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH/****************************************************************************/
302c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH/* find first unused card with this device_id */
303c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbHstruct pcilst_struct *ptr_find_free_pci_card_by_device(unsigned short vendor_id,
30415d8826a6a2ed954ce7daf1d321cce99d5c12668Greg Kroah-Hartman						       unsigned short device_id)
305c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH{
306c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH	struct pcilst_struct *amcc, *next;
307c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH
308c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH	for (amcc = amcc_devices; amcc; amcc = next) {
309c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH		next = amcc->next;
310c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH		if ((!amcc->used) && (amcc->device == device_id)
31115d8826a6a2ed954ce7daf1d321cce99d5c12668Greg Kroah-Hartman		    && (amcc->vendor == vendor_id))
312c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH			return amcc;
313c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH
314c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH	}
315c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH
316c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH	return NULL;
317c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH}
318c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH
319c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH/****************************************************************************/
320c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH/* find card on requested position */
321c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbHint i_find_free_pci_card_by_position(unsigned short vendor_id,
32215d8826a6a2ed954ce7daf1d321cce99d5c12668Greg Kroah-Hartman				     unsigned short device_id,
32315d8826a6a2ed954ce7daf1d321cce99d5c12668Greg Kroah-Hartman				     unsigned short pci_bus,
32415d8826a6a2ed954ce7daf1d321cce99d5c12668Greg Kroah-Hartman				     unsigned short pci_slot,
32515d8826a6a2ed954ce7daf1d321cce99d5c12668Greg Kroah-Hartman				     struct pcilst_struct **card)
326c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH{
327c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH	struct pcilst_struct *amcc, *next;
328c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH
329c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH	*card = NULL;
330c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH	for (amcc = amcc_devices; amcc; amcc = next) {
331c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH		next = amcc->next;
332c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH		if ((amcc->vendor == vendor_id) && (amcc->device == device_id)
33315d8826a6a2ed954ce7daf1d321cce99d5c12668Greg Kroah-Hartman		    && (amcc->pci_bus == pci_bus)
33415d8826a6a2ed954ce7daf1d321cce99d5c12668Greg Kroah-Hartman		    && (amcc->pci_slot == pci_slot)) {
335c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH			if (!(amcc->used)) {
336c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH				*card = amcc;
3372696fb57e6af653dd8b4df41b16754579f42fc78Bill Pemberton				return 0;	/*  ok, card is found */
338c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH			} else {
3395f74ea14c07fee91d3bdbaad88bff6264c6200e6Greg Kroah-Hartman				printk
34015d8826a6a2ed954ce7daf1d321cce99d5c12668Greg Kroah-Hartman				    (" - \nCard on requested position is used b:s %d:%d!\n",
34115d8826a6a2ed954ce7daf1d321cce99d5c12668Greg Kroah-Hartman				     pci_bus, pci_slot);
3422696fb57e6af653dd8b4df41b16754579f42fc78Bill Pemberton				return 2;	/*  card exist but is used */
343c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH			}
344c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH		}
345c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH	}
346c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH
3472696fb57e6af653dd8b4df41b16754579f42fc78Bill Pemberton	return 1;		/*  no card found */
348c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH}
349c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH
350c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH/****************************************************************************/
351c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH/* mark card as used */
352c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbHint i_pci_card_alloc(struct pcilst_struct *amcc)
353c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH{
354c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH	if (!amcc)
355c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH		return -1;
356c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH
357c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH	if (amcc->used)
358c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH		return 1;
359c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH	amcc->used = 1;
360c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH	return 0;
361c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH}
362c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH
363c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH/****************************************************************************/
364c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH/* mark card as free */
365c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbHint i_pci_card_free(struct pcilst_struct *amcc)
366c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH{
367c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH	if (!amcc)
368c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH		return -1;
369c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH
370c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH	if (!amcc->used)
371c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH		return 1;
372c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH	amcc->used = 0;
373c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH	return 0;
374c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH}
375c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH
376c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH/****************************************************************************/
377c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH/* display list of found cards */
378c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbHvoid v_pci_card_list_display(void)
379c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH{
380c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH	struct pcilst_struct *amcc, *next;
381c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH
382c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH	printk("List of pci cards\n");
383c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH	printk("bus:slot:func vendor device master io_amcc io_daq irq used\n");
384c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH
385c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH	for (amcc = amcc_devices; amcc; amcc = next) {
386c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH		next = amcc->next;
38715d8826a6a2ed954ce7daf1d321cce99d5c12668Greg Kroah-Hartman		printk
38815d8826a6a2ed954ce7daf1d321cce99d5c12668Greg Kroah-Hartman		    ("%2d   %2d   %2d  0x%4x 0x%4x   %3s   0x%4x 0x%4x  %2d  %2d\n",
38915d8826a6a2ed954ce7daf1d321cce99d5c12668Greg Kroah-Hartman		     amcc->pci_bus, amcc->pci_slot, amcc->pci_func,
39015d8826a6a2ed954ce7daf1d321cce99d5c12668Greg Kroah-Hartman		     amcc->vendor, amcc->device, amcc->master ? "yes" : "no",
39115d8826a6a2ed954ce7daf1d321cce99d5c12668Greg Kroah-Hartman		     amcc->io_addr[0], amcc->io_addr[2], amcc->irq, amcc->used);
392c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH
393c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH	}
394c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH}
395c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH
396c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH/****************************************************************************/
397c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH/* return all card information for driver */
398c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbHint i_pci_card_data(struct pcilst_struct *amcc,
39915d8826a6a2ed954ce7daf1d321cce99d5c12668Greg Kroah-Hartman		    unsigned char *pci_bus, unsigned char *pci_slot,
40015d8826a6a2ed954ce7daf1d321cce99d5c12668Greg Kroah-Hartman		    unsigned char *pci_func, unsigned short *io_addr,
40115d8826a6a2ed954ce7daf1d321cce99d5c12668Greg Kroah-Hartman		    unsigned short *irq, unsigned short *master)
402c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH{
403c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH	int i;
404c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH
405c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH	if (!amcc)
406c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH		return -1;
407c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH	*pci_bus = amcc->pci_bus;
408c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH	*pci_slot = amcc->pci_slot;
409c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH	*pci_func = amcc->pci_func;
410c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH	for (i = 0; i < 5; i++)
411c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH		io_addr[i] = amcc->io_addr[i];
412c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH	*irq = amcc->irq;
413c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH	*master = amcc->master;
414c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH	return 0;
415c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH}
416c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH
417c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH/****************************************************************************/
418c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH/* select and alloc card */
419c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbHstruct pcilst_struct *ptr_select_and_alloc_pci_card(unsigned short vendor_id,
42015d8826a6a2ed954ce7daf1d321cce99d5c12668Greg Kroah-Hartman						    unsigned short device_id,
42115d8826a6a2ed954ce7daf1d321cce99d5c12668Greg Kroah-Hartman						    unsigned short pci_bus,
42215d8826a6a2ed954ce7daf1d321cce99d5c12668Greg Kroah-Hartman						    unsigned short pci_slot)
423c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH{
424c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH	struct pcilst_struct *card;
425c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH
4262696fb57e6af653dd8b4df41b16754579f42fc78Bill Pemberton	if ((pci_bus < 1) & (pci_slot < 1)) {	/*  use autodetection */
427c3744138715045adb316284ee7a1e608f0278f6cBill Pemberton		card = ptr_find_free_pci_card_by_device(vendor_id, device_id);
428c3744138715045adb316284ee7a1e608f0278f6cBill Pemberton		if (card == NULL) {
4295f74ea14c07fee91d3bdbaad88bff6264c6200e6Greg Kroah-Hartman			printk(" - Unused card not found in system!\n");
430c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH			return NULL;
431c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH		}
432c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH	} else {
433c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH		switch (i_find_free_pci_card_by_position(vendor_id, device_id,
43415d8826a6a2ed954ce7daf1d321cce99d5c12668Greg Kroah-Hartman							 pci_bus, pci_slot,
43515d8826a6a2ed954ce7daf1d321cce99d5c12668Greg Kroah-Hartman							 &card)) {
436c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH		case 1:
4375f74ea14c07fee91d3bdbaad88bff6264c6200e6Greg Kroah-Hartman			printk
43815d8826a6a2ed954ce7daf1d321cce99d5c12668Greg Kroah-Hartman			    (" - Card not found on requested position b:s %d:%d!\n",
43915d8826a6a2ed954ce7daf1d321cce99d5c12668Greg Kroah-Hartman			     pci_bus, pci_slot);
440c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH			return NULL;
441c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH		case 2:
4425f74ea14c07fee91d3bdbaad88bff6264c6200e6Greg Kroah-Hartman			printk
44315d8826a6a2ed954ce7daf1d321cce99d5c12668Greg Kroah-Hartman			    (" - Card on requested position is used b:s %d:%d!\n",
44415d8826a6a2ed954ce7daf1d321cce99d5c12668Greg Kroah-Hartman			     pci_bus, pci_slot);
445c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH			return NULL;
446c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH		}
447c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH	}
448c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH
449c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH	if (i_pci_card_alloc(card) != 0) {
4505f74ea14c07fee91d3bdbaad88bff6264c6200e6Greg Kroah-Hartman		printk(" - Can't allocate card!\n");
451c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH		return NULL;
452c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH	}
453c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH
454c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH	return card;
455c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH}
456c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH
457c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#endif
458