| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 1 | /* | 
 | 2 |  *	linux/arch/alpha/kernel/console.c | 
 | 3 |  * | 
 | 4 |  * Architecture-specific specific support for VGA device on  | 
 | 5 |  * non-0 I/O hose | 
 | 6 |  */ | 
 | 7 |  | 
 | 8 | #include <linux/config.h> | 
 | 9 | #include <linux/pci.h> | 
 | 10 | #include <linux/init.h> | 
 | 11 | #include <linux/tty.h> | 
 | 12 | #include <linux/console.h> | 
 | 13 | #include <asm/vga.h> | 
 | 14 | #include <asm/machvec.h> | 
 | 15 |  | 
 | 16 | #ifdef CONFIG_VGA_HOSE | 
 | 17 |  | 
 | 18 | /* | 
 | 19 |  * Externally-visible vga hose bases | 
 | 20 |  */ | 
 | 21 | unsigned long __vga_hose_io_base = 0;	/* base for default hose */ | 
 | 22 | unsigned long __vga_hose_mem_base = 0;	/* base for default hose */ | 
 | 23 |  | 
 | 24 | static struct pci_controller * __init  | 
 | 25 | default_vga_hose_select(struct pci_controller *h1, struct pci_controller *h2) | 
 | 26 | { | 
 | 27 | 	if (h2->index < h1->index) | 
 | 28 | 		return h2; | 
 | 29 |  | 
 | 30 | 	return h1; | 
 | 31 | } | 
 | 32 |  | 
 | 33 | void __init  | 
 | 34 | set_vga_hose(struct pci_controller *hose) | 
 | 35 | { | 
 | 36 | 	if (hose) { | 
 | 37 | 		__vga_hose_io_base = hose->io_space->start; | 
 | 38 | 		__vga_hose_mem_base = hose->mem_space->start; | 
 | 39 | 	} | 
 | 40 | } | 
 | 41 |  | 
 | 42 | void __init  | 
 | 43 | locate_and_init_vga(void *(*sel_func)(void *, void *)) | 
 | 44 | { | 
 | 45 | 	struct pci_controller *hose = NULL; | 
 | 46 | 	struct pci_dev *dev = NULL; | 
 | 47 |  | 
 | 48 | 	if (!sel_func) sel_func = (void *)default_vga_hose_select; | 
 | 49 |  | 
 | 50 | 	for(dev=NULL; (dev=pci_get_class(PCI_CLASS_DISPLAY_VGA << 8, dev));) { | 
 | 51 | 		if (!hose) hose = dev->sysdata; | 
 | 52 | 		else hose = sel_func(hose, dev->sysdata); | 
 | 53 | 	} | 
 | 54 |  | 
 | 55 | 	/* Did we already inititialize the correct one? */ | 
 | 56 | 	if (conswitchp == &vga_con && | 
 | 57 | 	    __vga_hose_io_base == hose->io_space->start && | 
 | 58 | 	    __vga_hose_mem_base == hose->mem_space->start) | 
 | 59 | 		return; | 
 | 60 |  | 
 | 61 | 	/* Set the VGA hose and init the new console */ | 
 | 62 | 	set_vga_hose(hose); | 
 | 63 | 	take_over_console(&vga_con, 0, MAX_NR_CONSOLES-1, 1); | 
 | 64 | } | 
 | 65 |  | 
 | 66 | #endif |