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 * $FreeBSD$ 28 */ 29 30 /* 31 * We don't have registered vendor id yet... 32 */ 33 #define SBNI_PCI_VENDOR 0x55 34 #define SBNI_PCI_DEVICE 0x9f 35 36 #define ISA_MODE 0x00 37 #define PCI_MODE 0x01 38 39 #define SBNI_PORTS 4 40 41 enum sbni_reg { 42 CSR0 = 0, 43 CSR1 = 1, 44 DAT = 2 45 }; 46 47 /* CSR0 mapping */ 48 enum { 49 BU_EMP = 0x02, 50 RC_CHK = 0x04, 51 CT_ZER = 0x08, 52 TR_REQ = 0x10, 53 TR_RDY = 0x20, 54 EN_INT = 0x40, 55 RC_RDY = 0x80 56 }; 57 58 /* CSR1 mapping */ 59 #define PR_RES 0x80 60 61 struct sbni_csr1 { 62 unsigned rxl : 5; 63 unsigned rate : 2; 64 unsigned : 1; 65 }; 66 67 #define FRAME_ACK_MASK (u_int16_t)0x7000 68 #define FRAME_LEN_MASK (u_int16_t)0x03FF 69 #define FRAME_FIRST (u_int16_t)0x8000 70 #define FRAME_RETRY (u_int16_t)0x0800 71 72 #define FRAME_SENT_BAD (u_int16_t)0x4000 73 #define FRAME_SENT_OK (u_int16_t)0x3000 74 75 enum { 76 FL_WAIT_ACK = 1, 77 FL_NEED_RESEND = 2, 78 FL_PREV_OK = 4, 79 FL_SLOW_MODE = 8 80 }; 81 82 enum { 83 DEFAULT_IOBASEADDR = 0x210, 84 DEFAULT_INTERRUPTNUMBER = 5, 85 DEFAULT_RATE = 0, 86 DEFAULT_FRAME_LEN = 1012 87 }; 88 89 #define DEF_RXL_DELTA -1 90 #define DEF_RXL 0xf 91 92 #define SBNI_SIG 0x5a 93 94 #define SBNI_MIN_LEN (ETHER_MIN_LEN - 4) 95 #define SBNI_MAX_FRAME 1023 96 97 #define SBNI_HZ 18 /* ticks to wait for pong or packet */ 98 /* sbni watchdog called SBNI_HZ times per sec. */ 99 100 #define TR_ERROR_COUNT 32 101 #define CHANGE_LEVEL_START_TICKS 4 102