1 /*
2  * External Diva Server driver include file
3  *
4  * Copyright (C) Eicon Technology Corporation, 2000.
5  *
6  * Eicon File Revision :    1.5
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(DIVAS_H)
14 #define DIVAS_H
15 
16 #include "sys.h"
17 
18 
19 /* IOCTL commands */
20 
21 #define	DIA_IOCTL_INIT				(0)
22 #define	DIA_IOCTL_LOAD				(1)
23 #define	DIA_IOCTL_CONFIG			(2)
24 #define	DIA_IOCTL_START				(3)
25 #define	DIA_IOCTL_GET_NUM			(4)
26 #define	DIA_IOCTL_GET_LIST			(5)
27 #define	DIA_IOCTL_LOG				(6)
28 #define	DIA_IOCTL_DETECT			(7)
29 #define	DIA_IOCTL_SPACE				(8)
30 #define DIA_IOCTL_GET_MEM           (9)
31 #define DIA_IOCTL_FLAVOUR			(10)
32 #define	DIA_IOCTL_XLOG_REQ			(11)
33 
34 /* Error codes */
35 
36 #define XLOG_ERR_CARD_NUM	(13)
37 #define XLOG_ERR_DONE		(14)
38 #define XLOG_ERR_CMD		(15)
39 #define XLOG_ERR_TIMEOUT	(16)
40 #define XLOG_ERR_CARD_STATE	(17)
41 #define XLOG_ERR_UNKNOWN	(18)
42 #define XLOG_OK 			(0)
43 
44 /* Adapter states */
45 
46 #define DIA_UNKNOWN		(0)
47 #define DIA_RESET		(1)
48 #define DIA_LOADED		(2)
49 #define DIA_CONFIGURED	(3)
50 #define DIA_RUNNING		(4)
51 
52 /* Stucture for getting card specific information from active cad driver */
53 
54 typedef struct
55 {
56 	int card_type;
57 	int card_slot;
58 	int	state;
59 } dia_card_list_t;
60 
61 /* use following to select which logging to have active */
62 
63 #define	DIVAS_LOG_DEBUG		(1 << 0)
64 #define	DIVAS_LOG_XLOG		(1 << 1)
65 #define	DIVAS_LOG_IDI		(1 << 2)
66 #define	DIVAS_LOG_CAPI		(1 << 3)
67 
68 /* stucture for DIA_IOCTL_LOG to get information from adapter */
69 
70 typedef struct
71 {
72 	int		card_id;
73 	int		log_types;	/* bit mask of log types: use DIVAS_LOG_XXX */
74 } dia_log_t;
75 
76 /* list of cards supported by this driver */
77 
78 #define	DIA_CARD_TYPE_DIVA_SERVER	(0)	/* Diva Server PRI */
79 #define	DIA_CARD_TYPE_DIVA_SERVER_B	(1)	/* Diva Server BRI */
80 #define	DIA_CARD_TYPE_DIVA_SERVER_Q	(2)	/* Diva Server 4-BRI */
81 
82 /* bus types */
83 
84 #define	DIA_BUS_TYPE_ISA		(0)
85 #define	DIA_BUS_TYPE_ISA_PNP	(1)
86 #define	DIA_BUS_TYPE_PCI		(2)
87 #define	DIA_BUS_TYPE_MCA		(3)
88 
89 /* types of memory used (index for memory array below) */
90 
91 #define DIVAS_RAM_MEMORY 	0
92 #define DIVAS_REG_MEMORY 	1
93 #define DIVAS_CFG_MEMORY 	2
94 #define DIVAS_SHARED_MEMORY 3
95 #define DIVAS_CTL_MEMORY	4
96 /*
97  * card config information
98  * passed as parameter to DIA_IOCTL_INIT ioctl to initialise new card
99  */
100 
101 typedef struct
102 {
103 	int		card_id;	/* unique id assigned to this card */
104 	int		card_type;	/* use DIA_CARD_TYPE_xxx above */
105 	int		bus_type;	/* use DIA_BUS_TYPE_xxx above */
106 	int		bus_num;	/* bus number (instance number of bus type) */
107 	int		func_num;	/* adapter function number (PCI register) */
108 	int		slot;		/* slot number in bus */
109 	unsigned char	irq;		/* IRQ number */
110     int     reset_base; /* Reset register  for I/O mapped cards */
111 	int		io_base;	/* I/O base for I/O mapped cards */
112 	void	*memory[5];	/* memory base addresses for memory mapped cards */
113 	char	name[9];	/* name of adapter */
114 	int		serial;		/* serial number */
115 	unsigned char	int_priority;	/* Interrupt priority */
116 } dia_card_t;
117 
118 /*
119  * protocol configuration information
120  * passed as parameter to DIA_IOCTL_CONFIG ioctl to configure card
121  */
122 
123 typedef struct
124 {
125 	int				card_id;			/* to identify particular card */
126 	unsigned char	tei;
127 	unsigned char	nt2;
128 	unsigned char	watchdog;
129 	unsigned char	permanent;
130 	unsigned char	x_interface;
131 	unsigned char	stable_l2;
132 	unsigned char	no_order_check;
133 	unsigned char	handset_type;
134 	unsigned char	sig_flags;
135 	unsigned char	low_channel;
136 	unsigned char	prot_version;
137 	unsigned char	crc4;
138 	struct
139 	{
140 		unsigned char oad[32];
141 		unsigned char osa[32];
142 		unsigned char spid[32];
143 	}terminal[2];
144 } dia_config_t;
145 
146 /*
147  * code configuration
148  * passed as parameter to DIA_IOCTL_LOAD ioctl
149  * one of these ioctl per code file to load
150  */
151 
152 typedef struct
153 {
154 	int				card_id;	/* card to load */
155 	enum
156 	{
157 		DIA_CPU_CODE,			/* CPU code */
158 		DIA_DSP_CODE,			/* DSP code */
159 		DIA_CONT_CODE,			/* continuation of code */
160 		DIA_TABLE_CODE,			/* code table */
161 	        DIA_DLOAD_CNT,           /* number of downloads*/
162 		DIA_FPGA_CODE
163 	}				code_type;	/* code for CPU or DSP ? */
164 	int				length;		/* length of code */
165 	unsigned char	*code;		/* pointer (in user-space) to code */
166 } dia_load_t;
167 
168 /*
169  * start configuration
170  * passed as parameter to DIA_IOCTL_START ioctl
171  */
172 
173 typedef struct
174 {
175 	int				card_id;	/* card to start */
176 } dia_start_t;
177 
178 /* used for retrieving memory from the card */
179 
180 typedef struct {
181 	word	card_id;
182 	dword 	addr;
183 	byte	data[16 * 8];
184 } mem_block_t;
185 
186 /* DIVA Server specific addresses */
187 
188 #define DIVAS_CPU_START_ADDR    (0x0)
189 #define	ORG_MAX_PROTOCOL_CODE_SIZE	0x000A0000
190 #define	ORG_MAX_DSP_CODE_SIZE		(0x000F0000 - ORG_MAX_PROTOCOL_CODE_SIZE)
191 #define	ORG_DSP_CODE_BASE		(0xBF7F0000 - ORG_MAX_DSP_CODE_SIZE)
192 #define DIVAS_DSP_START_ADDR    (0xBF7A0000)
193 #define DIVAS_SHARED_OFFSET     (0x1000)
194 #define MP_DSP_CODE_BASE           0xa03a0000
195 #define MQ_PROTCODE_OFFSET  0x100000
196 #define MQ_SM_OFFSET		0X0f0000
197 
198 #define	V90D_MAX_PROTOCOL_CODE_SIZE	0x00090000
199 #define V90D_MAX_DSP_CODE_SIZE		(0x000F0000 - V90D_MAX_PROTOCOL_CODE_SIZE)
200 #define	V90D_DSP_CODE_BASE		(0xBF7F0000 - V90D_MAX_DSP_CODE_SIZE)
201 
202 #define MQ_ORG_MAX_PROTOCOL_CODE_SIZE   0x000a0000  /* max 640K Protocol-Code */
203 #define MQ_ORG_MAX_DSP_CODE_SIZE        0x00050000  /* max 320K DSP-Code */
204 #define MQ_ORG_DSP_CODE_BASE           (MQ_MAX_DSP_DOWNLOAD_ADDR \
205                                       - MQ_ORG_MAX_DSP_CODE_SIZE)
206 #define MQ_V90D_MAX_PROTOCOL_CODE_SIZE  0x00090000  /* max 576K Protocol-Code */
207 #define MQ_V90D_MAX_DSP_CODE_SIZE       0x00060000  /* max 384K DSP-Code if V.90D included */
208 #define	MQ_MAX_DSP_DOWNLOAD_ADDR        0xa03f0000
209 #define MQ_V90D_DSP_CODE_BASE          (MQ_MAX_DSP_DOWNLOAD_ADDR \
210                                       - MQ_V90D_MAX_DSP_CODE_SIZE)
211 
212 
213 #define ALIGNMENT_MASK_MAESTRA        0xfffffffc
214 
215 #endif /* DIVAS_H */
216