Home | History | Annotate | Line # | Download | only in pci
pci_machdep.c revision 1.7.8.1
      1  1.7.8.1   is /*	$NetBSD: pci_machdep.c,v 1.7.8.1 1997/03/11 20:50:19 is Exp $	*/
      2      1.1  cgd 
      3      1.1  cgd /*
      4      1.5  cgd  * Copyright (c) 1995, 1996 Carnegie-Mellon University.
      5      1.3  cgd  * All rights reserved.
      6      1.1  cgd  *
      7      1.3  cgd  * Author: Chris G. Demetriou
      8      1.3  cgd  *
      9      1.3  cgd  * Permission to use, copy, modify and distribute this software and
     10      1.3  cgd  * its documentation is hereby granted, provided that both the copyright
     11      1.3  cgd  * notice and this permission notice appear in all copies of the
     12      1.3  cgd  * software, derivative works or modified versions, and any portions
     13      1.3  cgd  * thereof, and that both notices appear in supporting documentation.
     14      1.3  cgd  *
     15      1.3  cgd  * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS"
     16      1.3  cgd  * CONDITION.  CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND
     17      1.3  cgd  * FOR ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
     18      1.3  cgd  *
     19      1.3  cgd  * Carnegie Mellon requests users of this software to return to
     20      1.1  cgd  *
     21      1.3  cgd  *  Software Distribution Coordinator  or  Software.Distribution (at) CS.CMU.EDU
     22      1.3  cgd  *  School of Computer Science
     23      1.3  cgd  *  Carnegie Mellon University
     24      1.3  cgd  *  Pittsburgh PA 15213-3890
     25      1.3  cgd  *
     26      1.3  cgd  * any improvements or extensions that they make and grant Carnegie the
     27      1.3  cgd  * rights to redistribute these changes.
     28      1.1  cgd  */
     29      1.1  cgd 
     30      1.1  cgd /*
     31      1.1  cgd  * Machine-specific functions for PCI autoconfiguration.
     32      1.1  cgd  */
     33      1.1  cgd 
     34      1.1  cgd #include <sys/types.h>
     35      1.1  cgd #include <sys/param.h>
     36      1.1  cgd #include <sys/time.h>
     37      1.1  cgd #include <sys/systm.h>
     38      1.1  cgd #include <sys/errno.h>
     39      1.1  cgd #include <sys/device.h>
     40      1.1  cgd #include <vm/vm.h>
     41      1.1  cgd 
     42      1.1  cgd #include <dev/isa/isavar.h>
     43      1.3  cgd #include <dev/pci/pcireg.h>
     44      1.1  cgd #include <dev/pci/pcivar.h>
     45      1.2  cgd #include <dev/pci/pcidevs.h>
     46      1.1  cgd 
     47      1.7  cgd #include "vga_pci.h"
     48      1.7  cgd #if NVGA_PCI
     49      1.7  cgd #include <alpha/pci/vga_pcivar.h>
     50      1.3  cgd #endif
     51      1.3  cgd 
     52      1.2  cgd #include "tga.h"
     53      1.3  cgd #if NTGA
     54      1.3  cgd #include <alpha/pci/tgavar.h>
     55      1.3  cgd #endif
     56      1.1  cgd 
     57      1.1  cgd void
     58      1.6  cgd pci_display_console(iot, memt, pc, bus, device, function)
     59      1.6  cgd 	bus_space_tag_t iot, memt;
     60      1.4  cgd 	pci_chipset_tag_t pc;
     61      1.4  cgd 	int bus, device, function;
     62      1.1  cgd {
     63      1.4  cgd 	pcitag_t tag;
     64      1.4  cgd 	pcireg_t id, class;
     65      1.4  cgd 	int match, nmatch;
     66      1.6  cgd 	void (*fn) __P((bus_space_tag_t, bus_space_tag_t, pci_chipset_tag_t,
     67      1.6  cgd 	    int, int, int));
     68      1.1  cgd 
     69      1.4  cgd 	tag = pci_make_tag(pc, bus, device, function);
     70      1.4  cgd 	id = pci_conf_read(pc, tag, PCI_ID_REG);
     71      1.2  cgd 	if (id == 0 || id == 0xffffffff)
     72      1.2  cgd 		panic("pci_display_console: no device at %d/%d/%d",
     73      1.2  cgd 		    bus, device, function);
     74      1.4  cgd 	class = pci_conf_read(pc, tag, PCI_CLASS_REG);
     75      1.4  cgd 
     76  1.7.8.1   is 	nmatch = match = 0; /* XXX really only if we've got FBs configured */
     77      1.4  cgd 	fn = NULL;
     78      1.2  cgd 
     79      1.7  cgd #if NVGA_PCI
     80      1.7  cgd 	nmatch = DEVICE_IS_VGA_PCI(class, id);
     81      1.4  cgd 	if (nmatch > match) {
     82      1.4  cgd 		match = nmatch;
     83      1.7  cgd 		fn = vga_pci_console;
     84      1.2  cgd 	}
     85      1.3  cgd #endif
     86      1.2  cgd #if NTGA
     87      1.4  cgd 	nmatch = DEVICE_IS_TGA(class, id);
     88      1.4  cgd 	if (nmatch > match) {
     89      1.4  cgd 		match = nmatch;
     90      1.4  cgd 		fn = tga_console;
     91      1.2  cgd 	}
     92      1.3  cgd #endif
     93      1.2  cgd 
     94      1.4  cgd 	if (fn != NULL)
     95      1.6  cgd 		(*fn)(iot, memt, pc, bus, device, function);
     96      1.4  cgd 	else
     97      1.4  cgd 		panic("pci_display_console: unconfigured device at %d/%d/%d",
     98      1.2  cgd 		    bus, device, function);
     99      1.1  cgd }
    100