1 1.8 dyoung /* $NetBSD: pnpbusvar.h,v 1.8 2011/07/01 16:55:42 dyoung Exp $ */ 2 1.1 garbled 3 1.1 garbled /*- 4 1.1 garbled * Copyright (c) 2006 The NetBSD Foundation, Inc. 5 1.1 garbled * All rights reserved. 6 1.1 garbled * 7 1.1 garbled * This code is derived from software contributed to The NetBSD Foundation 8 1.1 garbled * by Tim Rightnour. 9 1.1 garbled * 10 1.1 garbled * Redistribution and use in source and binary forms, with or without 11 1.1 garbled * modification, are permitted provided that the following conditions 12 1.1 garbled * are met: 13 1.1 garbled * 1. Redistributions of source code must retain the above copyright 14 1.1 garbled * notice, this list of conditions and the following disclaimer. 15 1.1 garbled * 2. Redistributions in binary form must reproduce the above copyright 16 1.1 garbled * notice, this list of conditions and the following disclaimer in the 17 1.1 garbled * documentation and/or other materials provided with the distribution. 18 1.1 garbled * 19 1.1 garbled * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS 20 1.1 garbled * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 21 1.1 garbled * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 22 1.1 garbled * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS 23 1.1 garbled * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 24 1.1 garbled * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 25 1.1 garbled * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 26 1.1 garbled * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 27 1.1 garbled * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 28 1.1 garbled * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 29 1.1 garbled * POSSIBILITY OF SUCH DAMAGE. 30 1.1 garbled */ 31 1.1 garbled 32 1.1 garbled #ifndef _PREP_PNPBUSVAR_H_ 33 1.1 garbled #define _PREP_PNPBUSVAR_H_ 34 1.1 garbled 35 1.1 garbled #include <sys/queue.h> 36 1.8 dyoung #include <sys/bus.h> 37 1.1 garbled #include <machine/residual.h> 38 1.1 garbled 39 1.1 garbled struct pnpbus_mem { 40 1.1 garbled SIMPLEQ_ENTRY(pnpbus_mem) next; 41 1.1 garbled uint32_t minbase, maxbase, align, len; 42 1.1 garbled int flags; 43 1.1 garbled }; 44 1.1 garbled struct pnpbus_io { 45 1.1 garbled SIMPLEQ_ENTRY(pnpbus_io) next; 46 1.1 garbled uint16_t minbase, maxbase, align, len; 47 1.1 garbled int flags; 48 1.1 garbled }; 49 1.1 garbled struct pnpbus_irq { 50 1.1 garbled SIMPLEQ_ENTRY(pnpbus_irq) next; 51 1.1 garbled uint16_t mask; 52 1.1 garbled int flags; 53 1.1 garbled }; 54 1.1 garbled struct pnpbus_dma { 55 1.1 garbled SIMPLEQ_ENTRY(pnpbus_dma) next; 56 1.1 garbled uint8_t mask; 57 1.1 garbled int flags; 58 1.1 garbled }; 59 1.1 garbled struct pnpbus_compatid { 60 1.1 garbled char idstr[8]; 61 1.1 garbled struct pnpbus_compatid *next; 62 1.1 garbled }; 63 1.1 garbled 64 1.1 garbled #define PNPBUS_MAXMEM 4 65 1.1 garbled #define PNPBUS_MAXIOPORT 8 66 1.1 garbled #define PNPBUS_MAXIRQ 2 67 1.1 garbled #define PNPBUS_MAXDMA 2 68 1.1 garbled 69 1.5 garbled #define IST_PNP -1 70 1.5 garbled 71 1.1 garbled struct pnpresources { 72 1.3 garbled int nummem, numiomem, numio, numirq, numdma; 73 1.1 garbled SIMPLEQ_HEAD(, pnpbus_mem) mem; 74 1.3 garbled SIMPLEQ_HEAD(, pnpbus_mem) iomem; 75 1.1 garbled SIMPLEQ_HEAD(, pnpbus_io) io; 76 1.1 garbled SIMPLEQ_HEAD(, pnpbus_irq) irq; 77 1.1 garbled SIMPLEQ_HEAD(, pnpbus_dma) dma; 78 1.1 garbled struct pnpbus_compatid *compatids; 79 1.1 garbled }; 80 1.1 garbled 81 1.1 garbled /* 82 1.1 garbled * Bus attach arguments 83 1.1 garbled */ 84 1.1 garbled struct pnpbus_attach_args { 85 1.5 garbled const char *paa_name; /* match to struct confargs*/ 86 1.5 garbled bus_space_tag_t paa_iot; /* i/o space tag */ 87 1.5 garbled bus_space_tag_t paa_memt; /* mem space tag */ 88 1.5 garbled isa_chipset_tag_t paa_ic; /* ISA chipset tag */ 89 1.5 garbled bus_dma_tag_t paa_dmat; /* ISA DMA tag */ 90 1.1 garbled }; 91 1.1 garbled 92 1.1 garbled /* 93 1.1 garbled * driver attach arguments 94 1.1 garbled */ 95 1.1 garbled struct pnpbus_dev_attach_args { 96 1.1 garbled bus_space_tag_t pna_iot; /* i/o space tag */ 97 1.1 garbled bus_space_tag_t pna_memt; /* mem space tag */ 98 1.1 garbled isa_chipset_tag_t pna_ic; /* ISA chipset tag */ 99 1.4 garbled bus_dma_tag_t pna_dmat; /* ISA DMA tag */ 100 1.1 garbled 101 1.1 garbled struct pnpresources pna_res; /* resources gathered from PNP */ 102 1.1 garbled char pna_devid[8]; /* PNP device id string */ 103 1.1 garbled PPC_DEVICE *pna_ppc_dev; /* PNP device entry */ 104 1.1 garbled void *pna_aux; /* driver specific */ 105 1.2 garbled uint8_t basetype; /* PNP base type */ 106 1.2 garbled uint8_t subtype; /* PNP subtype */ 107 1.2 garbled uint8_t interface; /* PNP interface */ 108 1.3 garbled uint16_t chipid; /* Chip identifier if any */ 109 1.3 garbled uint8_t chipmfg0; /* Chip vendor0 */ 110 1.3 garbled uint8_t chipmfg1; /* chip vendor1 */ 111 1.1 garbled }; 112 1.1 garbled 113 1.1 garbled /* 114 1.1 garbled * master bus 115 1.1 garbled */ 116 1.1 garbled struct pnpbus_softc { 117 1.7 matt device_t sc_dev; /* base device */ 118 1.1 garbled isa_chipset_tag_t sc_ic; 119 1.1 garbled 120 1.1 garbled bus_space_tag_t sc_iot; /* io space tag */ 121 1.1 garbled bus_space_tag_t sc_memt; /* mem space tag */ 122 1.4 garbled bus_dma_tag_t sc_dmat; /* ISA DMA tag */ 123 1.1 garbled }; 124 1.1 garbled 125 1.1 garbled int pnpbus_scan(struct pnpbus_dev_attach_args *pna, PPC_DEVICE *dev); 126 1.1 garbled void pnpbus_print_devres(struct pnpbus_dev_attach_args *pna); 127 1.5 garbled void *pnpbus_intr_establish(int idx, int level, int tover, 128 1.5 garbled int (*ih_fun)(void *), void *ih_arg, struct pnpresources *r); 129 1.1 garbled void pnpbus_intr_disestablish(void *arg); 130 1.1 garbled int pnpbus_getirqnum(struct pnpresources *r, int idx, int *irqp, int *istp); 131 1.1 garbled int pnpbus_getdmachan(struct pnpresources *r, int idx, int *chanp); 132 1.1 garbled int pnpbus_getioport(struct pnpresources *r, int idx, int *basep, 133 1.1 garbled int *sizep); 134 1.1 garbled int pnpbus_io_map(struct pnpresources *r, int idx, bus_space_tag_t *tagp, 135 1.1 garbled bus_space_handle_t *hdlp); 136 1.1 garbled void pnpbus_io_unmap(struct pnpresources *r, int idx, bus_space_tag_t tag, 137 1.1 garbled bus_space_handle_t hdl); 138 1.3 garbled int pnpbus_getiomem(struct pnpresources *r, int idx, int *basep, 139 1.3 garbled int *sizep); 140 1.3 garbled int pnpbus_iomem_map(struct pnpresources *r, int idx, bus_space_tag_t *tagp, 141 1.3 garbled bus_space_handle_t *hdlp); 142 1.3 garbled void pnpbus_iomem_unmap(struct pnpresources *r, int idx, bus_space_tag_t tag, 143 1.3 garbled bus_space_handle_t hdl); 144 1.1 garbled 145 1.1 garbled #endif /* _PREP_PNPBUSVAR_H_ */ 146