1*86d7f5d3SJohn Marino /*- 2*86d7f5d3SJohn Marino * Copyright (c) 2000,2001 Jonathan Chen. 3*86d7f5d3SJohn Marino * All rights reserved. 4*86d7f5d3SJohn Marino * 5*86d7f5d3SJohn Marino * Redistribution and use in source and binary forms, with or without 6*86d7f5d3SJohn Marino * modification, are permitted provided that the following conditions 7*86d7f5d3SJohn Marino * are met: 8*86d7f5d3SJohn Marino * 1. Redistributions of source code must retain the above copyright 9*86d7f5d3SJohn Marino * notice, this list of conditions and the following disclaimer. 10*86d7f5d3SJohn Marino * 2. Redistributions in binary form must reproduce the above copyright 11*86d7f5d3SJohn Marino * notice, this list of conditions and the following disclaimer in the 12*86d7f5d3SJohn Marino * documentation and/or other materials provided with the distribution. 13*86d7f5d3SJohn Marino * 14*86d7f5d3SJohn Marino * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 15*86d7f5d3SJohn Marino * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 16*86d7f5d3SJohn Marino * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 17*86d7f5d3SJohn Marino * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 18*86d7f5d3SJohn Marino * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 19*86d7f5d3SJohn Marino * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 20*86d7f5d3SJohn Marino * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 21*86d7f5d3SJohn Marino * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 22*86d7f5d3SJohn Marino * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 23*86d7f5d3SJohn Marino * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 24*86d7f5d3SJohn Marino * SUCH DAMAGE. 25*86d7f5d3SJohn Marino * 26*86d7f5d3SJohn Marino * $FreeBSD: src/sys/dev/cardbus/cardbusreg.h,v 1.8 2005/01/13 19:12:10 imp Exp $ 27*86d7f5d3SJohn Marino * $DragonFly: src/sys/dev/pccard/cardbus/cardbusreg.h,v 1.2 2007/07/05 12:08:54 sephe Exp $ 28*86d7f5d3SJohn Marino */ 29*86d7f5d3SJohn Marino 30*86d7f5d3SJohn Marino /* 31*86d7f5d3SJohn Marino * Register definitions for the Cardbus Bus 32*86d7f5d3SJohn Marino */ 33*86d7f5d3SJohn Marino 34*86d7f5d3SJohn Marino 35*86d7f5d3SJohn Marino /* Cardbus bus constants */ 36*86d7f5d3SJohn Marino #define CARDBUS_SLOTMAX 0 37*86d7f5d3SJohn Marino #define CARDBUS_FUNCMAX 7 38*86d7f5d3SJohn Marino 39*86d7f5d3SJohn Marino /* Cardbus configuration header registers */ 40*86d7f5d3SJohn Marino #define CARDBUS_BASE0_REG 0x10 41*86d7f5d3SJohn Marino #define CARDBUS_BASE1_REG 0x14 42*86d7f5d3SJohn Marino #define CARDBUS_BASE2_REG 0x18 43*86d7f5d3SJohn Marino #define CARDBUS_BASE3_REG 0x1C 44*86d7f5d3SJohn Marino #define CARDBUS_BASE4_REG 0x20 45*86d7f5d3SJohn Marino #define CARDBUS_BASE5_REG 0x24 46*86d7f5d3SJohn Marino #define CARDBUS_CIS_REG 0x28 47*86d7f5d3SJohn Marino # define CARDBUS_CIS_ASIMASK 0x07 48*86d7f5d3SJohn Marino # define CARDBUS_CIS_ADDRMASK 0x0ffffff8 49*86d7f5d3SJohn Marino # define CARDBUS_CIS_ASI_TUPLE 0x00 50*86d7f5d3SJohn Marino # define CARDBUS_CIS_ASI_BAR0 0x01 51*86d7f5d3SJohn Marino # define CARDBUS_CIS_ASI_BAR1 0x02 52*86d7f5d3SJohn Marino # define CARDBUS_CIS_ASI_BAR2 0x03 53*86d7f5d3SJohn Marino # define CARDBUS_CIS_ASI_BAR3 0x04 54*86d7f5d3SJohn Marino # define CARDBUS_CIS_ASI_BAR4 0x05 55*86d7f5d3SJohn Marino # define CARDBUS_CIS_ASI_BAR5 0x06 56*86d7f5d3SJohn Marino # define CARDBUS_CIS_ASI_ROM 0x07 57*86d7f5d3SJohn Marino #define CARDBUS_ROM_REG 0x30 58*86d7f5d3SJohn Marino # define CARDBUS_ROM_ENABLE 0x00000001 59*86d7f5d3SJohn Marino # define CARDBUS_ROM_ADDRMASK 0xfffff800 60*86d7f5d3SJohn Marino 61*86d7f5d3SJohn Marino /* EXROM offsets for reading CIS */ 62*86d7f5d3SJohn Marino #define CARDBUS_EXROM_SIGNATURE 0x00 63*86d7f5d3SJohn Marino #define CARDBUS_EXROM_DATA_PTR 0x18 64*86d7f5d3SJohn Marino 65*86d7f5d3SJohn Marino #define CARDBUS_EXROM_DATA_SIGNATURE 0x00 /* Signature ("PCIR") */ 66*86d7f5d3SJohn Marino #define CARDBUS_EXROM_DATA_VENDOR_ID 0x04 /* Vendor Identification */ 67*86d7f5d3SJohn Marino #define CARDBUS_EXROM_DATA_DEVICE_ID 0x06 /* Device Identification */ 68*86d7f5d3SJohn Marino #define CARDBUS_EXROM_DATA_LENGTH 0x0a /* PCI Data Structure Length */ 69*86d7f5d3SJohn Marino #define CARDBUS_EXROM_DATA_REV 0x0c /* PCI Data Structure Revision */ 70*86d7f5d3SJohn Marino #define CARDBUS_EXROM_DATA_CLASS_CODE 0x0d /* Class Code */ 71*86d7f5d3SJohn Marino #define CARDBUS_EXROM_DATA_IMAGE_LENGTH 0x10 /* Image Length */ 72*86d7f5d3SJohn Marino #define CARDBUS_EXROM_DATA_DATA_REV 0x12 /* Revision Level of Code/Data */ 73*86d7f5d3SJohn Marino #define CARDBUS_EXROM_DATA_CODE_TYPE 0x14 /* Code Type */ 74*86d7f5d3SJohn Marino #define CARDBUS_EXROM_DATA_INDICATOR 0x15 /* Indicator */ 75*86d7f5d3SJohn Marino 76*86d7f5d3SJohn Marino /* useful macros */ 77*86d7f5d3SJohn Marino #define CARDBUS_CIS_ADDR(x) \ 78*86d7f5d3SJohn Marino (CARDBUS_CIS_ADDRMASK & (x)) 79*86d7f5d3SJohn Marino #define CARDBUS_CIS_SPACE(x) \ 80*86d7f5d3SJohn Marino (CARDBUS_CIS_ASIMASK & (x)) 81*86d7f5d3SJohn Marino #define CARDBUS_CIS_ASI_BAR(x) \ 82*86d7f5d3SJohn Marino (((CARDBUS_CIS_ASIMASK & (x))-1)*4+0x10) 83*86d7f5d3SJohn Marino #define CARDBUS_CIS_ASI_ROM_IMAGE(x) \ 84*86d7f5d3SJohn Marino (((x) >> 28) & 0xf) 85*86d7f5d3SJohn Marino 86*86d7f5d3SJohn Marino #define CARDBUS_MAPREG_MEM_ADDR_MASK 0x0ffffff0 87*86d7f5d3SJohn Marino #define CARDBUS_MAPREG_MEM_ADDR(mr) \ 88*86d7f5d3SJohn Marino ((mr) & CARDBUS_MAPREG_MEM_ADDR_MASK) 89*86d7f5d3SJohn Marino #define CARDBUS_MAPREG_MEM_SIZE(mr) \ 90*86d7f5d3SJohn Marino (CARDBUS_MAPREG_MEM_ADDR(mr) & (~CARDBUS_MAPREG_MEM_ADDR(mr) + 1)) 91