1 /*
2  * Interface to Unix specific code for performing card I/O
3  *
4  * Copyright (C) Eicon Technology Corporation, 2000.
5  *
6  * Eicon File Revision :    1.6
7  *
8  * This software may be used and distributed according to the terms
9  * of the GNU General Public License, incorporated herein by reference.
10  *
11  */
12 
13 #if !defined(UXIO_H)
14 #define UXIO_H
15 
16 #include "sys.h"
17 #include "adapter.h"
18 
19 
20 struct pt_regs;
21 
22 /* user callback, returns zero if interrupt was from this card */
23 typedef	void		isr_fn_t(void *);
24 struct ux_diva_card_s
25 {
26 	word	in_use;
27 	int		io_base;
28 	int		reset_base;
29 	int		card_type;
30 	byte		*mapped;
31 	int		bus_num;
32 	int		func_num;
33 	int		slot;
34 	int		irq;
35 	byte		*pDRAM;
36 	byte		*pDEVICES;
37 	byte		*pCONFIG;
38 	byte		*pSHARED;
39 	byte		*pCONTROL;
40 	word		features;
41 	void		*user_isr_arg;
42 	isr_fn_t	*user_isr;
43 };
44 
45 /*
46  * Get a card handle to enable card to be accessed
47  */
48 
49 int		UxCardHandleGet(	ux_diva_card_t	**card,
50 							dia_card_t		*cfg);
51 
52 /*
53  * Free a card handle as no longer needed
54  */
55 
56 void	UxCardHandleFree(ux_diva_card_t *card);
57 
58 /*
59  * Lock and unlock access to a card
60  */
61 
62 long		UxCardLock(ux_diva_card_t *card);
63 void	UxCardUnlock(ux_diva_card_t *card, long ipl);
64 
65 /*
66  * Set the mapping address for PCI cards
67  */
68 
69 int		UxCardAddrMappingSet(ux_diva_card_t	*card,
70 							int				id,
71 							void			*address,
72 							int				size);
73 
74 /*
75  * Attach card to memory to enable it to be accessed
76  * Returns the mapped address
77  */
78 
79 void	*UxCardMemAttach(ux_diva_card_t *card, int id);
80 
81 /*
82  * map card out of memory after completion of access
83  */
84 
85 void	UxCardMemDetach(ux_diva_card_t *card, void *address);
86 
87 /*
88  * input functions for memory-mapped cards
89  */
90 
91 byte	UxCardMemIn(ux_diva_card_t *card, void *address);
92 
93 word	UxCardMemInW(ux_diva_card_t *card, void *address);
94 
95 dword	UxCardMemInD(ux_diva_card_t *card, void *address);
96 
97 void	UxCardMemInBuffer(	ux_diva_card_t *card,
98 							void			*address,
99 							void			*buffer,
100 							int				length);
101 
102 /*
103  * output functions for memory-mapped cards
104  */
105 
106 void UxCardMemOut(ux_diva_card_t *card, void *address, byte data);
107 
108 void UxCardMemOutW(ux_diva_card_t *card, void *address, word data);
109 
110 void UxCardMemOutD(ux_diva_card_t *card, void *address, dword data);
111 
112 void UxCardMemOutBuffer(	ux_diva_card_t	*card,
113 							void			*address,
114 							void			*buffer,
115 							int				length);
116 
117 /*
118  * input functions for I/O-mapped cards
119  */
120 
121 byte	UxCardIoIn(ux_diva_card_t *card, void *, void *address);
122 
123 word	UxCardIoInW(ux_diva_card_t *card, void *, void *address);
124 
125 dword	UxCardIoInD(ux_diva_card_t *card, void *, void *address);
126 
127 void	UxCardIoInBuffer(	ux_diva_card_t *card,
128 							void *, void			*address,
129 							void			*buffer,
130 							int				length);
131 
132 /*
133  * output functions for I/O-mapped cards
134  */
135 
136 void UxCardIoOut(ux_diva_card_t *card, void *, void *address, byte data);
137 
138 void UxCardIoOutW(ux_diva_card_t *card, void *, void *address, word data);
139 
140 void UxCardIoOutD(ux_diva_card_t *card, void *, void *address, dword data);
141 
142 void UxCardIoOutBuffer(	ux_diva_card_t	*card,
143 							void *, void			*address,
144 							void			*buffer,
145 							int				length);
146 
147 /*
148  * Get specified PCI config
149  */
150 
151 void	UxPciConfigRead(ux_diva_card_t	*card,
152 						int				size,
153 						int				offset,
154 						void			*value);
155 
156 /*
157  * Set specified PCI config
158  */
159 
160 void	UxPciConfigWrite(ux_diva_card_t	*card,
161 						int				size,
162 						int				offset,
163 						void			*value);
164 
165 /* allocate memory, returning NULL if none available */
166 
167 void	*UxAlloc(unsigned int size);
168 
169 void	UxFree(void *);
170 
171 /*
172  * Pause for specified number of milli-seconds
173  */
174 
175 void	UxPause(long ms);
176 
177 /*
178  * Install an ISR for the specified card
179  */
180 
181 int		UxIsrInstall(ux_diva_card_t *card, isr_fn_t *isr_fn, void *isr_arg);
182 
183 /*
184  * Remove an ISR for the specified card
185  */
186 void	UxIsrRemove(ux_diva_card_t *card, void *);
187 
188 /*
189  * DEBUG function to turn logging ON or OFF
190  */
191 
192 void	UxCardLog(int turn_on);
193 
194 long	UxInterlockedIncrement(ux_diva_card_t *card, long *dst);
195 long	UxInterlockedDecrement(ux_diva_card_t *card, long *dst);
196 
197 #endif /* of UXIO_H */
198