1 1.12 perry /* $NetBSD: pcibios.h,v 1.12 2007/12/25 18:33:33 perry Exp $ */ 2 1.1 thorpej 3 1.1 thorpej /* 4 1.1 thorpej * Copyright (c) 1999, by UCHIYAMA Yasushi 5 1.1 thorpej * All rights reserved. 6 1.1 thorpej * 7 1.1 thorpej * Redistribution and use in source and binary forms, with or without 8 1.1 thorpej * modification, are permitted provided that the following conditions 9 1.1 thorpej * are met: 10 1.1 thorpej * 1. Redistributions of source code must retain the above copyright 11 1.1 thorpej * notice, this list of conditions and the following disclaimer. 12 1.1 thorpej * 2. The name of the developer may NOT be used to endorse or promote products 13 1.1 thorpej * derived from this software without specific prior written permission. 14 1.1 thorpej * 15 1.1 thorpej * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 16 1.1 thorpej * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 17 1.1 thorpej * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 18 1.1 thorpej * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 19 1.1 thorpej * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 20 1.1 thorpej * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 21 1.1 thorpej * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 22 1.1 thorpej * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 23 1.1 thorpej * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 24 1.1 thorpej * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 25 1.1 thorpej * SUCH DAMAGE. 26 1.1 thorpej */ 27 1.1 thorpej 28 1.1 thorpej /* 29 1.1 thorpej * Data structure definitions for the PCI BIOS interface. 30 1.1 thorpej */ 31 1.1 thorpej 32 1.1 thorpej /* 33 1.1 thorpej * PCI BIOS return codes. 34 1.1 thorpej */ 35 1.1 thorpej #define PCIBIOS_SUCCESS 0x00 36 1.1 thorpej #define PCIBIOS_SERVICE_NOT_PRESENT 0x80 37 1.1 thorpej #define PCIBIOS_FUNCTION_NOT_SUPPORTED 0x81 38 1.1 thorpej #define PCIBIOS_BAD_VENDOR_ID 0x83 39 1.1 thorpej #define PCIBIOS_DEVICE_NOT_FOUND 0x86 40 1.1 thorpej #define PCIBIOS_BAD_REGISTER_NUMBER 0x87 41 1.1 thorpej #define PCIBIOS_SET_FAILED 0x88 42 1.1 thorpej #define PCIBIOS_BUFFER_TOO_SMALL 0x89 43 1.1 thorpej 44 1.1 thorpej /* 45 1.1 thorpej * PCI IRQ Routing Table definitions. 46 1.1 thorpej */ 47 1.1 thorpej 48 1.1 thorpej /* 49 1.1 thorpej * Slot entry (per PCI 2.1) 50 1.1 thorpej */ 51 1.1 thorpej struct pcibios_linkmap { 52 1.10 perry uint8_t link; 53 1.10 perry uint16_t bitmap; 54 1.12 perry } __packed; 55 1.1 thorpej 56 1.1 thorpej struct pcibios_intr_routing { 57 1.10 perry uint8_t bus; 58 1.10 perry uint8_t device; 59 1.1 thorpej struct pcibios_linkmap linkmap[4]; /* INT[A:D]# */ 60 1.10 perry uint8_t slot; 61 1.10 perry uint8_t reserved; 62 1.12 perry } __packed; 63 1.1 thorpej 64 1.1 thorpej /* 65 1.1 thorpej * $PIR header. Reference: 66 1.1 thorpej * 67 1.6 uebayasi * http://www.microsoft.com/whdc/hwdev/archive/BUSBIOS/pciirq.mspx 68 1.1 thorpej */ 69 1.1 thorpej struct pcibios_pir_header { 70 1.10 perry uint32_t signature; /* $PIR */ 71 1.10 perry uint16_t version; 72 1.10 perry uint16_t tablesize; 73 1.10 perry uint8_t router_bus; 74 1.10 perry uint8_t router_devfunc; 75 1.10 perry uint16_t exclusive_irq; 76 1.10 perry uint32_t compat_router; /* PCI vendor/product */ 77 1.10 perry uint32_t miniport; 78 1.10 perry uint8_t reserved[11]; 79 1.10 perry uint8_t checksum; 80 1.12 perry } __packed; 81 1.1 thorpej 82 1.3 soda #define PIR_DEVFUNC_DEVICE(devfunc) (((devfunc) >> 3) & 0x1f) 83 1.3 soda #define PIR_DEVFUNC_FUNCTION(devfunc) ((devfunc) & 7) 84 1.3 soda 85 1.7 kochi void pcibios_init(void); 86 1.1 thorpej 87 1.1 thorpej extern struct pcibios_pir_header pcibios_pir_header; 88 1.1 thorpej extern struct pcibios_intr_routing *pcibios_pir_table; 89 1.1 thorpej extern int pcibios_pir_table_nentries; 90 1.1 thorpej extern int pcibios_max_bus; 91 1.2 uch 92 1.3 soda #ifdef PCIBIOSVERBOSE 93 1.3 soda extern int pcibiosverbose; 94 1.3 soda 95 1.3 soda #define PCIBIOS_PRINTV(arg) \ 96 1.3 soda do { \ 97 1.3 soda if (pcibiosverbose) \ 98 1.11 uwe aprint_normal arg; \ 99 1.3 soda } while (0) 100 1.3 soda #define PCIBIOS_PRINTVN(n, arg) \ 101 1.3 soda do { \ 102 1.3 soda if (pcibiosverbose > (n)) \ 103 1.11 uwe aprint_normal arg; \ 104 1.3 soda } while (0) 105 1.3 soda #else 106 1.3 soda #define PCIBIOS_PRINTV(arg) 107 1.3 soda #define PCIBIOS_PRINTVN(n, arg) 108 1.3 soda #endif 109