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 59 /* CSR1 mapping */ 60 #define PR_RES 0x80 61 62 struct sbni_csr1 { 63 unsigned rxl : 5; 64 unsigned rate : 2; 65 unsigned : 1; 66 }; 67 68 69 70 #define FRAME_ACK_MASK (u_int16_t)0x7000 71 #define FRAME_LEN_MASK (u_int16_t)0x03FF 72 #define FRAME_FIRST (u_int16_t)0x8000 73 #define FRAME_RETRY (u_int16_t)0x0800 74 75 #define FRAME_SENT_BAD (u_int16_t)0x4000 76 #define FRAME_SENT_OK (u_int16_t)0x3000 77 78 79 enum { 80 FL_WAIT_ACK = 1, 81 FL_NEED_RESEND = 2, 82 FL_PREV_OK = 4, 83 FL_SLOW_MODE = 8 84 }; 85 86 87 enum { 88 DEFAULT_IOBASEADDR = 0x210, 89 DEFAULT_INTERRUPTNUMBER = 5, 90 DEFAULT_RATE = 0, 91 DEFAULT_FRAME_LEN = 1012 92 }; 93 94 #define DEF_RXL_DELTA -1 95 #define DEF_RXL 0xf 96 97 #define SBNI_SIG 0x5a 98 99 #define SBNI_MIN_LEN (ETHER_MIN_LEN - 4) 100 #define SBNI_MAX_FRAME 1023 101 102 #define SBNI_HZ 18 /* ticks to wait for pong or packet */ 103 /* sbni watchdog called SBNI_HZ times per sec. */ 104 105 #define TR_ERROR_COUNT 32 106 #define CHANGE_LEVEL_START_TICKS 4 107