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 39 enum sbni_reg { 40 CSR0 = 0, 41 CSR1 = 1, 42 DAT = 2 43 }; 44 45 /* CSR0 mapping */ 46 enum { 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 59 struct 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 73 enum { 74 FL_WAIT_ACK = 1, 75 FL_NEED_RESEND = 2, 76 FL_PREV_OK = 4, 77 FL_SLOW_MODE = 8 78 }; 79 80 enum { 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