186d7f5d3SJohn Marino /*- 286d7f5d3SJohn Marino * Copyright (c) 2000,2001 Jonathan Chen. 386d7f5d3SJohn Marino * All rights reserved. 486d7f5d3SJohn Marino * 586d7f5d3SJohn Marino * Redistribution and use in source and binary forms, with or without 686d7f5d3SJohn Marino * modification, are permitted provided that the following conditions 786d7f5d3SJohn Marino * are met: 886d7f5d3SJohn Marino * 1. Redistributions of source code must retain the above copyright 986d7f5d3SJohn Marino * notice, this list of conditions and the following disclaimer. 1086d7f5d3SJohn Marino * 2. Redistributions in binary form must reproduce the above copyright 1186d7f5d3SJohn Marino * notice, this list of conditions and the following disclaimer in the 1286d7f5d3SJohn Marino * documentation and/or other materials provided with the distribution. 1386d7f5d3SJohn Marino * 1486d7f5d3SJohn Marino * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 1586d7f5d3SJohn Marino * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 1686d7f5d3SJohn Marino * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 1786d7f5d3SJohn Marino * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 1886d7f5d3SJohn Marino * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 1986d7f5d3SJohn Marino * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 2086d7f5d3SJohn Marino * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 2186d7f5d3SJohn Marino * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 2286d7f5d3SJohn Marino * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 2386d7f5d3SJohn Marino * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 2486d7f5d3SJohn Marino * SUCH DAMAGE. 2586d7f5d3SJohn Marino * 2686d7f5d3SJohn Marino * $FreeBSD: src/sys/dev/cardbus/cardbusreg.h,v 1.8 2005/01/13 19:12:10 imp Exp $ 2786d7f5d3SJohn Marino * $DragonFly: src/sys/dev/pccard/cardbus/cardbusreg.h,v 1.2 2007/07/05 12:08:54 sephe Exp $ 2886d7f5d3SJohn Marino */ 2986d7f5d3SJohn Marino 3086d7f5d3SJohn Marino /* 3186d7f5d3SJohn Marino * Register definitions for the Cardbus Bus 3286d7f5d3SJohn Marino */ 3386d7f5d3SJohn Marino 3486d7f5d3SJohn Marino 3586d7f5d3SJohn Marino /* Cardbus bus constants */ 3686d7f5d3SJohn Marino #define CARDBUS_SLOTMAX 0 3786d7f5d3SJohn Marino #define CARDBUS_FUNCMAX 7 3886d7f5d3SJohn Marino 3986d7f5d3SJohn Marino /* Cardbus configuration header registers */ 4086d7f5d3SJohn Marino #define CARDBUS_BASE0_REG 0x10 4186d7f5d3SJohn Marino #define CARDBUS_BASE1_REG 0x14 4286d7f5d3SJohn Marino #define CARDBUS_BASE2_REG 0x18 4386d7f5d3SJohn Marino #define CARDBUS_BASE3_REG 0x1C 4486d7f5d3SJohn Marino #define CARDBUS_BASE4_REG 0x20 4586d7f5d3SJohn Marino #define CARDBUS_BASE5_REG 0x24 4686d7f5d3SJohn Marino #define CARDBUS_CIS_REG 0x28 4786d7f5d3SJohn Marino # define CARDBUS_CIS_ASIMASK 0x07 4886d7f5d3SJohn Marino # define CARDBUS_CIS_ADDRMASK 0x0ffffff8 4986d7f5d3SJohn Marino # define CARDBUS_CIS_ASI_TUPLE 0x00 5086d7f5d3SJohn Marino # define CARDBUS_CIS_ASI_BAR0 0x01 5186d7f5d3SJohn Marino # define CARDBUS_CIS_ASI_BAR1 0x02 5286d7f5d3SJohn Marino # define CARDBUS_CIS_ASI_BAR2 0x03 5386d7f5d3SJohn Marino # define CARDBUS_CIS_ASI_BAR3 0x04 5486d7f5d3SJohn Marino # define CARDBUS_CIS_ASI_BAR4 0x05 5586d7f5d3SJohn Marino # define CARDBUS_CIS_ASI_BAR5 0x06 5686d7f5d3SJohn Marino # define CARDBUS_CIS_ASI_ROM 0x07 5786d7f5d3SJohn Marino #define CARDBUS_ROM_REG 0x30 5886d7f5d3SJohn Marino # define CARDBUS_ROM_ENABLE 0x00000001 5986d7f5d3SJohn Marino # define CARDBUS_ROM_ADDRMASK 0xfffff800 6086d7f5d3SJohn Marino 6186d7f5d3SJohn Marino /* EXROM offsets for reading CIS */ 6286d7f5d3SJohn Marino #define CARDBUS_EXROM_SIGNATURE 0x00 6386d7f5d3SJohn Marino #define CARDBUS_EXROM_DATA_PTR 0x18 6486d7f5d3SJohn Marino 6586d7f5d3SJohn Marino #define CARDBUS_EXROM_DATA_SIGNATURE 0x00 /* Signature ("PCIR") */ 6686d7f5d3SJohn Marino #define CARDBUS_EXROM_DATA_VENDOR_ID 0x04 /* Vendor Identification */ 6786d7f5d3SJohn Marino #define CARDBUS_EXROM_DATA_DEVICE_ID 0x06 /* Device Identification */ 6886d7f5d3SJohn Marino #define CARDBUS_EXROM_DATA_LENGTH 0x0a /* PCI Data Structure Length */ 6986d7f5d3SJohn Marino #define CARDBUS_EXROM_DATA_REV 0x0c /* PCI Data Structure Revision */ 7086d7f5d3SJohn Marino #define CARDBUS_EXROM_DATA_CLASS_CODE 0x0d /* Class Code */ 7186d7f5d3SJohn Marino #define CARDBUS_EXROM_DATA_IMAGE_LENGTH 0x10 /* Image Length */ 7286d7f5d3SJohn Marino #define CARDBUS_EXROM_DATA_DATA_REV 0x12 /* Revision Level of Code/Data */ 7386d7f5d3SJohn Marino #define CARDBUS_EXROM_DATA_CODE_TYPE 0x14 /* Code Type */ 7486d7f5d3SJohn Marino #define CARDBUS_EXROM_DATA_INDICATOR 0x15 /* Indicator */ 7586d7f5d3SJohn Marino 7686d7f5d3SJohn Marino /* useful macros */ 7786d7f5d3SJohn Marino #define CARDBUS_CIS_ADDR(x) \ 7886d7f5d3SJohn Marino (CARDBUS_CIS_ADDRMASK & (x)) 7986d7f5d3SJohn Marino #define CARDBUS_CIS_SPACE(x) \ 8086d7f5d3SJohn Marino (CARDBUS_CIS_ASIMASK & (x)) 8186d7f5d3SJohn Marino #define CARDBUS_CIS_ASI_BAR(x) \ 8286d7f5d3SJohn Marino (((CARDBUS_CIS_ASIMASK & (x))-1)*4+0x10) 8386d7f5d3SJohn Marino #define CARDBUS_CIS_ASI_ROM_IMAGE(x) \ 8486d7f5d3SJohn Marino (((x) >> 28) & 0xf) 8586d7f5d3SJohn Marino 8686d7f5d3SJohn Marino #define CARDBUS_MAPREG_MEM_ADDR_MASK 0x0ffffff0 8786d7f5d3SJohn Marino #define CARDBUS_MAPREG_MEM_ADDR(mr) \ 8886d7f5d3SJohn Marino ((mr) & CARDBUS_MAPREG_MEM_ADDR_MASK) 8986d7f5d3SJohn Marino #define CARDBUS_MAPREG_MEM_SIZE(mr) \ 9086d7f5d3SJohn Marino (CARDBUS_MAPREG_MEM_ADDR(mr) & (~CARDBUS_MAPREG_MEM_ADDR(mr) + 1)) 91