Deleted Added
full compact
psycho.c (178840) psycho.c (182020)
1/*-
2 * Copyright (c) 1999, 2000 Matthew R. Green
3 * Copyright (c) 2001 - 2003 by Thomas Moestl <tmm@FreeBSD.org>
4 * Copyright (c) 2005 - 2006 Marius Strobl <marius@FreeBSD.org>
5 * All rights reserved.
6 *
7 * Redistribution and use in source and binary forms, with or without
8 * modification, are permitted provided that the following conditions

--- 17 unchanged lines hidden (view full) ---

26 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
27 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
28 * SUCH DAMAGE.
29 *
30 * from: NetBSD: psycho.c,v 1.39 2001/10/07 20:30:41 eeh Exp
31 */
32
33#include <sys/cdefs.h>
1/*-
2 * Copyright (c) 1999, 2000 Matthew R. Green
3 * Copyright (c) 2001 - 2003 by Thomas Moestl <tmm@FreeBSD.org>
4 * Copyright (c) 2005 - 2006 Marius Strobl <marius@FreeBSD.org>
5 * All rights reserved.
6 *
7 * Redistribution and use in source and binary forms, with or without
8 * modification, are permitted provided that the following conditions

--- 17 unchanged lines hidden (view full) ---

26 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
27 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
28 * SUCH DAMAGE.
29 *
30 * from: NetBSD: psycho.c,v 1.39 2001/10/07 20:30:41 eeh Exp
31 */
32
33#include <sys/cdefs.h>
34__FBSDID("$FreeBSD: head/sys/sparc64/pci/psycho.c 178840 2008-05-07 21:22:15Z marius $");
34__FBSDID("$FreeBSD: head/sys/sparc64/pci/psycho.c 182020 2008-08-22 20:28:19Z marius $");
35
36/*
37 * Support for `Hummingbird' (UltraSPARC IIe), `Psycho' and `Psycho+'
38 * (UltraSPARC II) and `Sabre' (UltraSPARC IIi) UPA to PCI bridges.
39 */
40
41#include "opt_ofw_pci.h"
42#include "opt_psycho.h"

--- 233 unchanged lines hidden (view full) ---

276 const char *dtype;
277
278 dtype = ofw_bus_get_type(dev);
279 if (dtype != NULL && strcmp(dtype, OFW_PCI_TYPE) == 0 &&
280 psycho_get_desc(dev) != NULL) {
281 device_set_desc(dev, "U2P UPA-PCI bridge");
282 return (0);
283 }
35
36/*
37 * Support for `Hummingbird' (UltraSPARC IIe), `Psycho' and `Psycho+'
38 * (UltraSPARC II) and `Sabre' (UltraSPARC IIi) UPA to PCI bridges.
39 */
40
41#include "opt_ofw_pci.h"
42#include "opt_psycho.h"

--- 233 unchanged lines hidden (view full) ---

276 const char *dtype;
277
278 dtype = ofw_bus_get_type(dev);
279 if (dtype != NULL && strcmp(dtype, OFW_PCI_TYPE) == 0 &&
280 psycho_get_desc(dev) != NULL) {
281 device_set_desc(dev, "U2P UPA-PCI bridge");
282 return (0);
283 }
284
285 return (ENXIO);
286}
287
288static int
289psycho_attach(device_t dev)
290{
291 char name[sizeof("pci108e,1000")];
292 struct psycho_icarg *pica;

--- 33 unchanged lines hidden (view full) ---

326 sc->sc_half = 0;
327 break;
328 case PSR_PCICTL1:
329 sc->sc_half = 1;
330 break;
331 default:
332 panic("%s: bogus PCI control register location",
333 __func__);
284 return (ENXIO);
285}
286
287static int
288psycho_attach(device_t dev)
289{
290 char name[sizeof("pci108e,1000")];
291 struct psycho_icarg *pica;

--- 33 unchanged lines hidden (view full) ---

325 sc->sc_half = 0;
326 break;
327 case PSR_PCICTL1:
328 sc->sc_half = 1;
329 break;
330 default:
331 panic("%s: bogus PCI control register location",
332 __func__);
333 /* NOTREACHED */
334 }
335 } else {
336 rid = 0;
337 sc->sc_pcictl = PSR_PCICTL0;
338 sc->sc_half = 0;
339 }
340 sc->sc_mem_res = bus_alloc_resource_any(dev, SYS_RES_MEMORY, &rid,
341 (sc->sc_mode == PSYCHO_MODE_PSYCHO ? RF_SHAREABLE : 0) |

--- 304 unchanged lines hidden (view full) ---

646 PCIM_STATUS_RTABORT | PCIM_STATUS_STABORT |
647 PCIM_STATUS_PERRREPORT, 2);
648
649 /*
650 * Set the latency timer register as this isn't always done by the
651 * firmware.
652 */
653 PCIB_WRITE_CONFIG(dev, sc->sc_pci_secbus, PCS_DEVICE, PCS_FUNC,
334 }
335 } else {
336 rid = 0;
337 sc->sc_pcictl = PSR_PCICTL0;
338 sc->sc_half = 0;
339 }
340 sc->sc_mem_res = bus_alloc_resource_any(dev, SYS_RES_MEMORY, &rid,
341 (sc->sc_mode == PSYCHO_MODE_PSYCHO ? RF_SHAREABLE : 0) |

--- 304 unchanged lines hidden (view full) ---

646 PCIM_STATUS_RTABORT | PCIM_STATUS_STABORT |
647 PCIM_STATUS_PERRREPORT, 2);
648
649 /*
650 * Set the latency timer register as this isn't always done by the
651 * firmware.
652 */
653 PCIB_WRITE_CONFIG(dev, sc->sc_pci_secbus, PCS_DEVICE, PCS_FUNC,
654 PCIR_LATTIMER, 64, 1);
654 PCIR_LATTIMER, OFW_PCI_LATENCY, 1);
655
656 for (n = PCIR_VENDOR; n < PCIR_STATUS; n += sizeof(uint16_t))
657 le16enc(&sc->sc_pci_hpbcfg[n], bus_space_read_2(
658 sc->sc_pci_cfgt, sc->sc_pci_bh[OFW_PCI_CS_CONFIG],
659 PSYCHO_CONF_OFF(sc->sc_pci_secbus, PCS_DEVICE,
660 PCS_FUNC, n)));
661 for (n = PCIR_REVID; n <= PCIR_BIST; n += sizeof(uint8_t))
662 sc->sc_pci_hpbcfg[n] = bus_space_read_1(sc->sc_pci_cfgt,

--- 298 unchanged lines hidden (view full) ---

961 r = shrt;
962 break;
963 case 4:
964 i = bus_space_peek_4(sc->sc_pci_cfgt, bh, offset, &wrd);
965 r = wrd;
966 break;
967 default:
968 panic("%s: bad width", __func__);
655
656 for (n = PCIR_VENDOR; n < PCIR_STATUS; n += sizeof(uint16_t))
657 le16enc(&sc->sc_pci_hpbcfg[n], bus_space_read_2(
658 sc->sc_pci_cfgt, sc->sc_pci_bh[OFW_PCI_CS_CONFIG],
659 PSYCHO_CONF_OFF(sc->sc_pci_secbus, PCS_DEVICE,
660 PCS_FUNC, n)));
661 for (n = PCIR_REVID; n <= PCIR_BIST; n += sizeof(uint8_t))
662 sc->sc_pci_hpbcfg[n] = bus_space_read_1(sc->sc_pci_cfgt,

--- 298 unchanged lines hidden (view full) ---

961 r = shrt;
962 break;
963 case 4:
964 i = bus_space_peek_4(sc->sc_pci_cfgt, bh, offset, &wrd);
965 r = wrd;
966 break;
967 default:
968 panic("%s: bad width", __func__);
969 /* NOTREACHED */
969 }
970
971 if (i) {
972#ifdef PSYCHO_DEBUG
973 printf("%s: read data error reading: %d.%d.%d: 0x%x\n",
974 __func__, bus, slot, func, reg);
975#endif
976 r = -1;

--- 19 unchanged lines hidden (view full) ---

996 case 2:
997 bus_space_write_2(sc->sc_pci_cfgt, bh, offset, val);
998 break;
999 case 4:
1000 bus_space_write_4(sc->sc_pci_cfgt, bh, offset, val);
1001 break;
1002 default:
1003 panic("%s: bad width", __func__);
970 }
971
972 if (i) {
973#ifdef PSYCHO_DEBUG
974 printf("%s: read data error reading: %d.%d.%d: 0x%x\n",
975 __func__, bus, slot, func, reg);
976#endif
977 r = -1;

--- 19 unchanged lines hidden (view full) ---

997 case 2:
998 bus_space_write_2(sc->sc_pci_cfgt, bh, offset, val);
999 break;
1000 case 4:
1001 bus_space_write_4(sc->sc_pci_cfgt, bh, offset, val);
1002 break;
1003 default:
1004 panic("%s: bad width", __func__);
1005 /* NOTREACHED */
1004 }
1005}
1006
1007static int
1008psycho_route_interrupt(device_t bridge, device_t dev, int pin)
1009{
1010 struct psycho_softc *sc;
1011 struct ofw_pci_register reg;

--- 261 unchanged lines hidden (view full) ---

1273 break;
1274 case SYS_RES_IOPORT:
1275 rm = &sc->sc_pci_io_rman;
1276 bt = sc->sc_pci_iot;
1277 bh = sc->sc_pci_bh[OFW_PCI_CS_IO];
1278 break;
1279 default:
1280 return (NULL);
1006 }
1007}
1008
1009static int
1010psycho_route_interrupt(device_t bridge, device_t dev, int pin)
1011{
1012 struct psycho_softc *sc;
1013 struct ofw_pci_register reg;

--- 261 unchanged lines hidden (view full) ---

1275 break;
1276 case SYS_RES_IOPORT:
1277 rm = &sc->sc_pci_io_rman;
1278 bt = sc->sc_pci_iot;
1279 bh = sc->sc_pci_bh[OFW_PCI_CS_IO];
1280 break;
1281 default:
1282 return (NULL);
1283 /* NOTREACHED */
1281 }
1282
1283 rv = rman_reserve_resource(rm, start, end, count, flags, child);
1284 if (rv == NULL)
1285 return (NULL);
1286 rman_set_rid(rv, *rid);
1287 bh += rman_get_start(rv);
1288 rman_set_bustag(rv, bt);
1289 rman_set_bushandle(rv, bh);
1290
1291 if (needactivate) {
1292 if (bus_activate_resource(child, type, *rid, rv)) {
1293 rman_release_resource(rv);
1294 return (NULL);
1295 }
1296 }
1284 }
1285
1286 rv = rman_reserve_resource(rm, start, end, count, flags, child);
1287 if (rv == NULL)
1288 return (NULL);
1289 rman_set_rid(rv, *rid);
1290 bh += rman_get_start(rv);
1291 rman_set_bustag(rv, bt);
1292 rman_set_bushandle(rv, bh);
1293
1294 if (needactivate) {
1295 if (bus_activate_resource(child, type, *rid, rv)) {
1296 rman_release_resource(rv);
1297 return (NULL);
1298 }
1299 }
1297
1298 return (rv);
1299}
1300
1301static int
1302psycho_activate_resource(device_t bus, device_t child, int type, int rid,
1303 struct resource *r)
1304{
1305 void *p;

--- 84 unchanged lines hidden ---
1300 return (rv);
1301}
1302
1303static int
1304psycho_activate_resource(device_t bus, device_t child, int type, int rid,
1305 struct resource *r)
1306{
1307 void *p;

--- 84 unchanged lines hidden ---