summaryrefslogtreecommitdiff
path: root/sys/dev/pci/czreg.h
blob: 3114ef4e5a648598f571e79f7efbbaea69d00d15 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
/*	$OpenBSD: czreg.h,v 1.2 2003/11/16 20:30:06 avsm Exp $	*/
/*	$NetBSD$	*/

/*-
 * Copyright (c) 2000 Zembu Labs, Inc.
 * All rights reserved.
 *
 * Author: Jason R. Thorpe <thorpej@zembu.com>
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 * 1. Redistributions of source code must retain the above copyright
 *    notice, this list of conditions and the following disclaimer.
 * 2. Redistributions in binary form must reproduce the above copyright
 *    notice, this list of conditions and the following disclaimer in the
 *    documentation and/or other materials provided with the distribution.
 * 3. All advertising materials mentioning features or use of this software
 *    must display the following acknowledgement:
 *	This product includes software developed by Zembu Labs, Inc.
 * 4. Neither the name of Zembu Labs nor the names of its employees may
 *    be used to endorse or promote products derived from this software
 *    without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY ZEMBU LABS, INC. ``AS IS'' AND ANY EXPRESS
 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WAR-
 * RANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DIS-
 * CLAIMED.  IN NO EVENT SHALL ZEMBU LABS BE LIABLE FOR ANY DIRECT, INDIRECT,
 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */

/*
 * Register and firmware communication definitions for the Cyclades
 * Z series of multi-port serial adapters.
 */

/*
 * The Cyclades-Z series is an intelligent multi-port serial controller
 * comprised of:
 *
 *	- PLX PCI9060ES PCI bus interface
 *	- Xilinx XC5204 FPGA
 *	- IDT R3052 MIPS CPU
 *
 * Communication is performed by modifying structures in board local
 * RAM or in host RAM.  We define offsets into these structures so
 * that either access method may be used.
 *
 * The Cyclades-Z comes in three basic flavors:
 *
 *	- Cyclades-8Zo rev 1 -- This is an older 8-port board with no
 *	  FPGA.
 *
 *	- Cyclades-8Zo rev 2 -- This is the newer 8-port board, which
 *	  uses an octopus cable.
 *
 *	- Cyclades-Ze -- This is the top-of-the-line of the Cyclades
 *	  multiport serial controllers.  It uses a SCSI-2 cable to
 *	  connect the card to a rack-mountable serial expansion box
 *	  (1U high).  Each box has 16 RJ45 serial ports, and up to
 *	  4 boxes can be chained together, for a total of 64 ports.
 *	  Up to 2 boxes can be used without an extra power supply.
 *	  Boxes 3 and 4 require their own external power supply,
 *	  otherwise the firmware will refuse to start (as it cannot
 *	  communicate with the UARTs in the boxes).
 *
 * The 8Zo flavors have not been tested, tho the programming interface
 * is identical (except for the firmware load phase of the 8Zo rev 1;
 * no FPGA load is done in that case), so they should work.
 */

/*
 * PLX Local Address Base values for the board RAM and FPGA regsiters.
 *
 * These values are specific to the Cyclades-Z.
 */
#define	LOCAL_ADDR0_RAM		(0x00000000 | LASBA_ENABLE)
#define	LOCAL_ADDR0_FPGA	(0x14000000 | LASBA_ENABLE)

/*
 * PLX Mailbox0 values.
 *
 * These values are specific to the Cyclades-Z.
 */
#define	MAILBOX0_8Zo_V1		0	/* Cyclades-8Zo ver. 1 */
#define	MAILBOX0_8Zo_V2		1	/* Cyclades-8Zo ver. 2 */
#define	MAILBOX0_Ze_V1		2	/* Cyclades-Ze ver. 1 */

/*
 * Bits in the PLX INIT_CTRL register.
 *
 * These values are specific to the Cyclades-Z.
 */
#define	CONTROL_FPGA_LOADED	CONTROL_GPI

/*
 * FPGA registers on the 8Zo boards.
 */
#define	FPGA_ID			0x00	/* FPGA ID */
#define	FPGA_VERSION		0x04	/* FPGA version */
#define	FPGA_CPU_START		0x08	/* CPU start */
#define	FPGA_CPU_STOP		0x0c	/* CPU stop */
#define	FPGA_MISC		0x10	/* Misc. register */
#define	FPGA_IDT_MODE		0x14	/* IDT MIPS R3000 mode */
#define	FPGA_UART_IRQ_STAT	0x18	/* UART interrupt status */
#define	FPGA_CLEAR_TIMER0_IRQ	0x1c	/* clear timer 0 interrupt */
#define	FPGA_CLEAR_TIMER1_IRQ	0x20	/* clear timer 1 interrupt */
#define	FPGA_CLEAR_TIMER2_IRQ	0x24	/* clear timer 3 interrupt */
#define	FPGA_TEST		0x28	/* test register */
#define	FPGA_TEST_COUNT		0x2c	/* test count register */
#define	FPGA_TIMER_SELECT	0x30	/* timer select */
#define	FPGA_PR_UART_IRQ_STAT	0x34	/* prioritized UART interrupt status */
#define	FPGA_RAM_WAIT_STATE	0x38	/* RAM wait state */
#define	FPGA_UART_WAIT_STATE	0x3c	/* UART wait state */
#define	FPGA_TIMER_WAIT_STATE	0x40	/* timer wait state */
#define	FPGA_ACK_WAIT_STATE	0x44	/* ACK wait state */

/*
 * FPGA registers on the Ze boards.  Note that the important registers
 * (FPGA_ID, FPGA_VERSION, FPGA_CPU_START, FPGA_CPU_STOP) are all in the
 * same place as on the 8Zo boards, and have the same meanings.
 */
#define	FPGA_ZE_ID		0x00	/* FPGA ID */
#define	FPGA_ZE_VERSION		0x04	/* FPGA version */
#define	FPGA_ZE_CPU_START	0x08	/* CPU start */
#define	FPGA_ZE_CPU_STOP	0x0c	/* CPU stop */
#define	FPGA_ZE_CTRL		0x10	/* CPU control */
#define	FPGA_ZE_ZBUS_WAIT	0x14	/* Z-Bus wait state */
#define	FPGA_ZE_TIMER_DIV	0x18	/* timer divisor */
#define	FPGA_ZE_TIMER_IRQ_ACK	0x1c	/* timer interrupt ACK */

/*
 * Values for FPGA ID.
 */
#define	FPGA_ID_8Zo_V1		0x95	/* Cyclades-8Zo ver. 1 */
#define	FPGA_ID_8Zo_V2		0x84	/* Cyclades-8Zo ver. 2 */
#define	FPGA_ID_Ze_V1		0x89	/* Cyclades-Ze ver. 1 */

/*
 * Values for Cyclades-Ze timer divisor.
 */
#define	ZE_TIMER_DIV_1M		0x00
#define	ZE_TIMER_DIV_256K	0x01
#define	ZE_TIMER_DIV_128K	0x02
#define	ZE_TIMER_DIV_32K	0x03

/*
 * Firmware interface starts here.
 *
 * These values are valid for the following Cyclades-Z firmware:
 *
 *	@(#) Copyright (c) Cyclades Corporation, 1996, 1999
 *	@(#) ZFIRM Cyclades-Z/PCI Firmware V_3.3.1 09/24/99
 */

/*
 * Structure of the firmware header.
 */
#define	ZFIRM_MAX_BLOCKS	16	/* max. # of firmware/FPGA blocks */
struct zfirm_header {
	u_int8_t zfh_name[64];
	u_int8_t zfh_date[32];
	u_int8_t zfh_aux[32];
	u_int32_t zfh_nconfig;
	u_int32_t zfh_configoff;
	u_int32_t zfh_nblocks;
	u_int32_t zfh_blockoff;
	u_int32_t zfh_reserved[9];
} __packed;

struct zfirm_config {
	u_int8_t zfc_name[64];
	u_int32_t zfc_mailbox;
	u_int32_t zfc_function;
	u_int32_t zfc_nblocks;
	u_int32_t zfc_blocklist[ZFIRM_MAX_BLOCKS];
} __packed;

#define	ZFC_FUNCTION_NORMAL	0	/* normal operation */
#define	ZFC_FUNCTION_TEST	1	/* test mode operation */

struct zfirm_block {
	u_int32_t zfb_type;
	u_int32_t zfb_fileoff;
	u_int32_t zfb_ramoff;
	u_int32_t zfb_size;
} __packed;

#define	ZFB_TYPE_FIRMWARE	0	/* MIPS firmware */
#define	ZFB_TYPE_FPGA		1	/* FPGA code */

#define	ZFIRM_MAX_CHANNELS	64	/* max. # channels per board */

/*
 * Firmware ID structure, which the firmware sets up after it boots.
 */
#define	ZFIRM_SIG_OFF	   0x00000180	/* offset of signature in board RAM */
#define	ZFIRM_CTRLADDR_OFF 0x00000184	/* offset of offset of control
					   structure */
#define	ZFIRM_SIG	0x5557465A	/* ZFIRM signature */
#define	ZFIRM_HLT	0x59505B5C	/* Halt due to power problem */
#define	ZFIRM_RST	0x56040674	/* Firmware reset */

/*
 * The firmware control structures are made up of the following:
 *
 *	BOARD CONTROL (64 bytes)
 *	CHANNEL CONTROL (96 bytes * ZFIRM_MAX_CHANNELS)
 *	BUFFER CONTROL (64 bytes * ZFIRM_MAX_CHANNELS)
 */

#define	ZFIRM_BRDCTL_SIZE	64
#define	ZFIRM_CHNCTL_SIZE	96
#define	ZFIRM_BUFCTL_SIZE	64

#define	ZFIRM_CHNCTL_OFF(chan, reg)					\
	(ZFIRM_BRDCTL_SIZE + ((chan) * ZFIRM_CHNCTL_SIZE) + (reg))
#define	ZFIRM_BUFCTL_OFF(chan, reg)					\
	(ZFIRM_CHNCTL_OFF(ZFIRM_MAX_CHANNELS, 0) + 			\
	 ((chan) * ZFIRM_BUFCTL_SIZE) + (reg))

/*
 * Offsets in the BOARD CONTROL structure.
 */
	/* static info provided by MIPS */
#define	BRDCTL_NCHANNEL		0x00	/* number of channels */
#define	BRDCTL_FWVERSION	0x04	/* firmware version */
	/* static info provided by driver */
#define	BRDCTL_C_OS		0x08	/* operating system ID */
#define	BRDCTL_DRVERSION	0x0c	/* driver version */
	/* board control area */
#define	BRDCTL_INACTIVITY	0x10	/* inactivity control */
	/* host to firmware commands */
#define	BRDCTL_HCMD_CHANNEL	0x14	/* channel number */
#define	BRDCTL_HCMD_PARAM	0x18	/* parameter */
	/* firmware to host commands */
#define	BRDCTL_FWCMD_CHANNEL	0x1c	/* channel number */
#define	BRDCTL_FWCMD_PARAM	0x20	/* parameter */
#define	BRDCTL_INT_QUEUE_OFF	0x24	/* offset to INT_QUEUE structure */

/*
 * Offsets in the CHANNEL CONTROL structure.
 */
#define	CHNCTL_OP_MODE		0x00	/* operation mode */
#define	CHNCTL_INTR_ENABLE	0x04	/* interrupt making for UART */
#define	CHNCTL_SW_FLOW		0x08	/* SW flow control */
#define	CHNCTL_FLOW_STATUS	0x0c	/* output flow status */
#define	CHNCTL_COMM_BAUD	0x10	/* baud rate -- numerically specified */
#define	CHNCTL_COMM_PARITY	0x14	/* parity */
#define	CHNCTL_COMM_DATA_L	0x18	/* data length/stop */
#define	CHNCTL_COMM_FLAGS	0x1c	/* other flags */
#define	CHNCTL_HW_FLOW		0x20	/* HW flow control */
#define	CHNCTL_RS_CONTROL	0x24	/* RS-232 outputs */
#define	CHNCTL_RS_STATUS	0x28	/* RS-232 inputs */
#define	CHNCTL_FLOW_XON		0x2c	/* XON character */
#define	CHNCTL_FLOW_XOFF	0x30	/* XOFF character */
#define	CHNCTL_HW_OVERFLOW	0x34	/* HW overflow counter */
#define	CHNCTL_SW_OVERFLOW	0x38	/* SW overflow counter */
#define	CHNCTL_COMM_ERROR	0x3c	/* frame/parity error counter */
#define	CHNCTL_ICHAR		0x40	/* special interrupt character */

/*
 * Offsets in the BUFFER CONTROL structure.
 */
#define	BUFCTL_FLAG_DMA		0x00	/* buffers are in Host memory */
#define	BUFCTL_TX_BUFADDR	0x04	/* address of Tx buffer */
#define	BUFCTL_TX_BUFSIZE	0x08	/* size of Tx buffer */
#define	BUFCTL_TX_THRESHOLD	0x0c	/* Tx low water mark */
#define	BUFCTL_TX_GET		0x10	/* tail index Tx buf */
#define	BUFCTL_TX_PUT		0x14	/* head index Tx buf */
#define	BUFCTL_RX_BUFADDR	0x18	/* address of Rx buffer */
#define	BUFCTL_RX_BUFSIZE	0x1c	/* size of Rx buffer */
#define	BUFCTL_RX_THRESHOLD	0x20	/* Rx high water mark */
#define	BUFCTL_RX_GET		0x24	/* tail index Rx buf */
#define	BUFCTL_RX_PUT		0x28	/* head index Rx buf */

/* Values for operating system ID (BOARD CONTROL) */
#define	C_OS_SVR3		0x00000010	/* generic SVR3 */
#define	C_OS_XENIX		0x00000011	/* SCO XENIX */
#define	C_OS_SCO		0x00000012	/* SCO SVR3 */
#define	C_OS_SVR4		0x00000020	/* generic SVR4 */
#define	C_OS_UXWARE		0x00000021	/* UnixWare */
#define	C_OS_LINUX		0x00000030	/* Linux */
#define	C_OS_SOLARIS		0x00000040	/* Solaris */
#define	C_OS_BSD		0x00000050	/* generic BSD */
#define	C_OS_DOS		0x00000070	/* generic DOS */
#define	C_OS_NT			0x00000080	/* Windows NT */
#define	C_OS_OS2		0x00000090	/* IBM OS/2 */
#define	C_OS_MACOS		0x000000a0	/* MacOS */
#define	C_OS_AIX		0x000000b0	/* IBM AIX */

/* Values for op_mode (CHANNEL CONTROL) */
#define	C_CH_DISABLE		0x00000000	/* channel is disabled */
#define	C_CH_TXENABLE		0x00000001	/* channel Tx enabled */
#define	C_CH_RXENABLE		0x00000002	/* channel Rx enabled */
#define	C_CH_ENABLE		0x00000003	/* channel Tx/Rx enabled */
#define	C_CH_LOOPBACK		0x00000004	/* Loopback mode */

/* Values for comm_parity (CHANNEL CONTROL) */
#define	C_PR_NONE		0x00000000	/* None */
#define	C_PR_ODD		0x00000001	/* Odd */
#define	C_PR_EVEN		0x00000002	/* Even */
#define	C_PR_MARK		0x00000004	/* Mark */
#define	C_PR_SPACE		0x00000008	/* Space */
#define	C_PR_PARITY		0x000000ff
#define	C_PR_DISCARD		0x00000100	/* discard char with
						   frame/parity error */
#define	C_PR_IGNORE		0x00000200	/* ignore frame/par error */

/* Values for comm_data_l (CHANNEL CONTROL) */
#define	C_DL_CS5		0x00000001
#define	C_DL_CS6		0x00000002
#define	C_DL_CS7		0x00000004
#define	C_DL_CS8		0x00000008
#define	C_DL_CS			0x0000000f
#define	C_DL_1STOP		0x00000010
#define	C_DL_15STOP		0x00000020
#define	C_DL_2STOP		0x00000040
#define	C_DL_STOP		0x000000f0

/* Values for intr_enable (CHANNEL CONTROL) */
#define	C_IN_DISABLE		0x00000000	/* zero, disable interrupts */
#define	C_IN_TXBEMPTY		0x00000001	/* tx buffer empty */
#define	C_IN_TXLOWWM		0x00000002	/* tx buffer below LWM */
#define	C_IN_TXFEMPTY		0x00000004	/* tx buffer + FIFO +
						   shift reg. empty */
#define	C_IN_RXHIWM		0x00000010	/* rx buffer above HWM */
#define	C_IN_RXNNDT		0x00000020	/* rx no new data timeout */
#define	C_IN_MDCD		0x00000100	/* modem DCD change */
#define	C_IN_MDSR		0x00000200	/* modem DSR change */
#define	C_IN_MRI		0x00000400	/* modem RI change */
#define	C_IN_MCTS		0x00000800	/* modem CTS change */
#define	C_IN_RXBRK		0x00001000	/* Break received */
#define	C_IN_PR_ERROR		0x00002000	/* parity error */
#define	C_IN_FR_ERROR		0x00004000	/* frame error */
#define	C_IN_OVR_ERROR		0x00008000	/* overrun error */
#define	C_IN_RXOFL		0x00010000	/* RX buffer overflow */
#define	C_IN_IOCTLW		0x00020000	/* I/O control w/ wait */
#define	C_IN_MRTS		0x00040000	/* modem RTS drop */
#define	C_IN_ICHAR		0x00080000	/* special intr. char
						   received */

/* Values for flow control (CHANNEL CONTROL) */
#define	C_FL_OXX		0x00000001	/* output Xon/Xoff flow
						   control */
#define	C_FL_IXX		0x00000002	/* input Xon/Xoff flow
						   control */
#define	C_FL_OIXANY		0x00000004	/* output Xon/Xoff (any xon) */
#define	C_FL_SWFLOW		0x0000000f

/* Values for flow status (CHANNEL CONTROL) */
#define	C_FS_TXIDLE		0x00000000	/* no Tx data in the buffer
						   or UART */
#define	C_FS_SENDING		0x00000001      /* UART is sending data */
#define C_FS_SWFLOW		0x00000002      /* Tx is stopped by received
						   Xoff */

/* Values for RS-232 signals (CHANNEL CONTROL) */
#define	C_RS_PARAM		0x80000000	/* indicates presence of
						   parameter in IOCTL command */
#define	C_RS_RTS		0x00000001	/* RTS */
#define	C_RS_DTR		0x00000004	/* DTR */
#define	C_RS_DCD		0x00000100	/* CD */
#define	C_RS_DSR		0x00000200	/* DSR */
#define	C_RS_RI			0x00000400	/* RI */
#define	C_RS_CTS		0x00000800	/* CTS */

/* Commands Host <--> Board */
#define	C_CM_RESET		0x01	/* resets/flushes buffers */
#define	C_CM_IOCTL		0x02	/* re-reads CH_CTRL */
#define	C_CM_IOCTLW		0x03	/* re-reads CH_CTRL, intr when done */
#define	C_CM_IOCTLM		0x04	/* RS-232 outputs change */
#define	C_CM_SENDXOFF		0x10	/* sends Xoff */
#define	C_CM_SENDXON		0x11	/* sends Xon */
#define	C_CM_CLFLOW		0x12	/* Clears flow control (resume) */
#define	C_CM_SENDBRK		0x41	/* sends break */
#define	C_CM_INTBACK		0x42	/* Interrupt back */
#define	C_CM_SET_BREAK		0x43	/* Tx break on */
#define	C_CM_CLR_BREAK		0x44	/* Tx break off */
#define	C_CM_CMD_DONE		0x45	/* Previous command done */
#define	C_CM_INTBACK2		0x46	/* Alternate Interrupt back */
#define	C_CM_TINACT		0x51	/* sets inactivity detection */
#define	C_CM_IRQ_ENBL		0x52	/* enables generation of interrupts */
#define	C_CM_IRQ_DSBL		0x53	/* disables generation of interrupts */
#define	C_CM_ACK_ENBL		0x54	/* enables acknolowdged interrupt
					   mode */
#define	C_CM_ACK_DSBL		0x55	/* disables acknolowdged intr mode */
#define	C_CM_FLUSH_RX		0x56	/* flushes Rx buffer */
#define	C_CM_FLUSH_TX		0x57	/* flushes Tx buffer */
#define	C_CM_Q_ENABLE		0x58	/* enables queue access from the
					   driver */
#define	C_CM_Q_DISABLE		0x59	/* disables queue access from the
					   driver */
#define	C_CM_TXBEMPTY		0x60	/* Tx buffer is empty */
#define	C_CM_TXLOWWM		0x61	/* Tx buffer low water mark */
#define	C_CM_RXHIWM		0x62	/* Rx buffer high water mark */
#define	C_CM_RXNNDT		0x63	/* rx no new data timeout */
#define	C_CM_TXFEMPTY		0x64	/* Tx buffer, FIFO and shift reg.
					   are empty */
#define	C_CM_ICHAR		0x65	/* Special Interrupt Character
					   received */
#define	C_CM_MDCD		0x70	/* modem DCD change */
#define	C_CM_MDSR		0x71	/* modem DSR change */
#define	C_CM_MRI		0x72	/* modem RI change */
#define	C_CM_MCTS		0x73	/* modem CTS change */
#define	C_CM_MRTS		0x74	/* modem RTS drop */
#define	C_CM_RXBRK		0x84	/* Break received */
#define	C_CM_PR_ERROR		0x85	/* Parity error */
#define	C_CM_FR_ERROR		0x86	/* Frame error */
#define	C_CM_OVR_ERROR		0x87	/* Overrun error */
#define	C_CM_RXOFL		0x88	/* RX buffer overflow */
#define	C_CM_CMDERROR		0x90	/* command error */
#define	C_CM_FATAL		0x91	/* fatal error */
#define	C_CM_HW_RESET		0x92	/* reset board */