1 1.4 thorpej /* $NetBSD: xcvbus.c,v 1.4 2023/12/20 14:18:38 thorpej Exp $ */ 2 1.1 freza 3 1.1 freza /* 4 1.1 freza * Copyright (c) 2006 Jachym Holecek 5 1.1 freza * All rights reserved. 6 1.1 freza * 7 1.1 freza * Written for DFC Design, s.r.o. 8 1.1 freza * 9 1.1 freza * Redistribution and use in source and binary forms, with or without 10 1.1 freza * modification, are permitted provided that the following conditions 11 1.1 freza * are met: 12 1.1 freza * 13 1.1 freza * 1. Redistributions of source code must retain the above copyright 14 1.1 freza * notice, this list of conditions and the following disclaimer. 15 1.1 freza * 16 1.1 freza * 2. Redistributions in binary form must reproduce the above copyright 17 1.1 freza * notice, this list of conditions and the following disclaimer in the 18 1.1 freza * documentation and/or other materials provided with the distribution. 19 1.1 freza * 20 1.1 freza * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 21 1.1 freza * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 22 1.1 freza * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 23 1.1 freza * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 24 1.1 freza * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 25 1.1 freza * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 26 1.1 freza * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 27 1.1 freza * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 28 1.1 freza * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 29 1.1 freza * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 30 1.1 freza */ 31 1.1 freza 32 1.1 freza #include <sys/cdefs.h> 33 1.4 thorpej __KERNEL_RCSID(0, "$NetBSD: xcvbus.c,v 1.4 2023/12/20 14:18:38 thorpej Exp $"); 34 1.1 freza 35 1.1 freza #include <sys/param.h> 36 1.1 freza #include <sys/systm.h> 37 1.1 freza #include <sys/types.h> 38 1.1 freza #include <sys/device.h> 39 1.1 freza 40 1.3 dyoung #include <sys/bus.h> 41 1.1 freza #include <powerpc/ibm4xx/dev/plbvar.h> 42 1.1 freza 43 1.1 freza #include <evbppc/virtex/dev/xcvbusvar.h> 44 1.1 freza 45 1.1 freza 46 1.1 freza static int xcvbus_match(device_t, cfdata_t, void *); 47 1.1 freza static void xcvbus_attach(device_t, device_t, void *); 48 1.1 freza 49 1.1 freza 50 1.2 matt CFATTACH_DECL_NEW(xcvbus, 0, 51 1.1 freza xcvbus_match, xcvbus_attach, NULL, NULL); 52 1.1 freza 53 1.1 freza 54 1.1 freza static int 55 1.1 freza xcvbus_match(device_t parent, cfdata_t cf, void *aux) 56 1.1 freza { 57 1.1 freza struct plb_attach_args *paa = aux; 58 1.1 freza 59 1.1 freza return (strcmp(paa->plb_name, cf->cf_name) == 0); 60 1.1 freza } 61 1.1 freza 62 1.1 freza static void 63 1.1 freza xcvbus_attach(device_t parent, device_t self, void *aux) 64 1.1 freza { 65 1.1 freza struct plb_attach_args *paa = aux; 66 1.1 freza 67 1.1 freza printf(": Xilinx Virtex FPGA\n"); 68 1.1 freza 69 1.1 freza virtex_autoconf(self, paa); 70 1.1 freza } 71 1.1 freza 72 1.1 freza /* 73 1.1 freza * Public interface. 74 1.1 freza */ 75 1.1 freza 76 1.1 freza int 77 1.1 freza xcvbus_print(void *aux, const char *pnp) 78 1.1 freza { 79 1.1 freza struct xcvbus_attach_args *vaa = aux; 80 1.1 freza 81 1.1 freza if (pnp) 82 1.1 freza aprint_normal("%s at %s", vaa->vaa_name, pnp); 83 1.1 freza 84 1.1 freza if (vaa->vaa_addr != -1) { 85 1.1 freza if (vaa->_vaa_is_dcr) 86 1.1 freza aprint_normal(" dcr 0x%x", vaa->vaa_iot->pbs_base); 87 1.1 freza else 88 1.1 freza aprint_normal(" mem 0x%x", vaa->vaa_addr); 89 1.1 freza } 90 1.1 freza 91 1.1 freza if (vaa->vaa_intr != -1) 92 1.1 freza aprint_normal(" intr %d", vaa->vaa_intr); 93 1.1 freza if (vaa->vaa_tx_dmac != NULL) 94 1.1 freza aprint_normal(" tx %d", vaa->vaa_tx_dmac->dmac_chan); 95 1.1 freza if (vaa->vaa_rx_dmac != NULL) 96 1.1 freza aprint_normal(" rx %d", vaa->vaa_rx_dmac->dmac_chan); 97 1.1 freza 98 1.1 freza return (UNCONF); 99 1.1 freza } 100 1.1 freza 101 1.1 freza int 102 1.2 matt xcvbus_child_match(device_t parent, cfdata_t cf, void *aux) 103 1.1 freza { 104 1.1 freza struct xcvbus_attach_args *vaa = aux; 105 1.1 freza 106 1.1 freza return (strcmp(vaa->vaa_name, cf->cf_name) == 0); 107 1.1 freza } 108