1/*-
2 * Copyright (c) 1997-2001 Granch, Ltd. All rights reserved.
3 * Author: Denis I.Timofeev <timofeev@granch.ru>
4 *
5 * Redistributon and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 * 1. Redistributions of source code must retain the above copyright
9 *    notice unmodified, this list of conditions, and the following
10 *    disclaimer.
11 * 2. Redistributions in binary form must reproduce the above copyright
12 *    notice, this list of conditions and the following disclaimer in the
13 *    documentation and/or other materials provided with the distribution.
14 *
15 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
16 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
17 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
18 * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
19 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
20 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
21 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
22 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
23 * LIABILITY, OR TORT (INCLUDING NEIGENCE OR OTHERWISE) ARISING IN ANY WAY
24 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
25 * SUCH DAMAGE.
26 */
27
28/*
29 * We don't have registered vendor id yet...
30 */
31#define SBNI_PCI_VENDOR 	0x55
32#define SBNI_PCI_DEVICE 	0x9f
33
34#define ISA_MODE 0x00
35#define PCI_MODE 0x01
36
37#define	SBNI_PORTS	4
38
39enum sbni_reg {
40	CSR0 = 0,
41	CSR1 = 1,
42	DAT  = 2
43};
44
45/* CSR0 mapping */
46enum {
47	BU_EMP = 0x02,
48	RC_CHK = 0x04,
49	CT_ZER = 0x08,
50	TR_REQ = 0x10,
51	TR_RDY = 0x20,
52	EN_INT = 0x40,
53	RC_RDY = 0x80
54};
55
56/* CSR1 mapping */
57#define PR_RES 0x80
58
59struct sbni_csr1 {
60	unsigned rxl	: 5;
61	unsigned rate	: 2;
62	unsigned 	: 1;
63};
64
65#define FRAME_ACK_MASK  (u_int16_t)0x7000
66#define FRAME_LEN_MASK  (u_int16_t)0x03FF
67#define FRAME_FIRST     (u_int16_t)0x8000
68#define FRAME_RETRY     (u_int16_t)0x0800
69
70#define FRAME_SENT_BAD  (u_int16_t)0x4000
71#define FRAME_SENT_OK   (u_int16_t)0x3000
72
73enum {
74	FL_WAIT_ACK    = 1,
75	FL_NEED_RESEND = 2,
76	FL_PREV_OK     = 4,
77	FL_SLOW_MODE   = 8
78};
79
80enum {
81	DEFAULT_IOBASEADDR = 0x210,
82	DEFAULT_INTERRUPTNUMBER = 5,
83	DEFAULT_RATE = 0,
84	DEFAULT_FRAME_LEN = 1012
85};
86
87#define DEF_RXL_DELTA	-1
88#define DEF_RXL		0xf
89
90#define SBNI_SIG 0x5a
91
92#define	SBNI_MIN_LEN	(ETHER_MIN_LEN - 4)
93#define SBNI_MAX_FRAME	1023
94
95#define SBNI_HZ 18 /* ticks to wait for pong or packet */
96		/* sbni watchdog called SBNI_HZ times per sec. */
97
98#define TR_ERROR_COUNT 32
99#define CHANGE_LEVEL_START_TICKS 4
100