1/*
2 * drivers.c
3 *
4 * This program is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU General Public License
6 * as published by the Free Software Foundation; either version
7 * 2 of the License, or (at your option) any later version.
8 *
9 * Copyright (c) 1999 The Puffin Group
10 * Copyright (c) 2001 Matthew Wilcox for Hewlett Packard
11 * Copyright (c) 2001 Helge Deller <deller@gmx.de>
12 * Copyright (c) 2001,2002 Ryan Bradetich
13 * Copyright (c) 2004-2005 Thibaut VARENE <varenet@parisc-linux.org>
14 *
15 * The file handles registering devices and drivers, then matching them.
16 * It's the closest we get to a dating agency.
17 *
18 * If you're thinking about modifying this file, here are some gotchas to
19 * bear in mind:
20 *  - 715/Mirage device paths have a dummy device between Lasi and its children
21 *  - The EISA adapter may show up as a sibling or child of Wax
22 *  - Dino has an optionally functional serial port.  If firmware enables it,
23 *    it shows up as a child of Dino.  If firmware disables it, the buswalk
24 *    finds it and it shows up as a child of Cujo
25 *  - Dino has both parisc and pci devices as children
26 *  - parisc devices are discovered in a random order, including children
27 *    before parents in some cases.
28 */
29
30#include <linux/slab.h>
31#include <linux/types.h>
32#include <linux/kernel.h>
33#include <linux/pci.h>
34#include <linux/spinlock.h>
35#include <linux/string.h>
36#include <asm/hardware.h>
37#include <asm/io.h>
38#include <asm/pdc.h>
39#include <asm/parisc-device.h>
40
41/* See comments in include/asm-parisc/pci.h */
42struct hppa_dma_ops *hppa_dma_ops __read_mostly;
43EXPORT_SYMBOL(hppa_dma_ops);
44
45static struct device root = {
46	.bus_id = "parisc",
47};
48
49static inline int check_dev(struct device *dev)
50{
51	if (dev->bus == &parisc_bus_type) {
52		struct parisc_device *pdev;
53		pdev = to_parisc_device(dev);
54		return pdev->id.hw_type != HPHW_FAULTY;
55	}
56	return 1;
57}
58
59static struct device *
60parse_tree_node(struct device *parent, int index, struct hardware_path *modpath);
61
62struct recurse_struct {
63	void * obj;
64	int (*fn)(struct device *, void *);
65};
66
67static int descend_children(struct device * dev, void * data)
68{
69	struct recurse_struct * recurse_data = (struct recurse_struct *)data;
70
71	if (recurse_data->fn(dev, recurse_data->obj))
72		return 1;
73	else
74		return device_for_each_child(dev, recurse_data, descend_children);
75}
76
77/**
78 *	for_each_padev - Iterate over all devices in the tree
79 *	@fn:	Function to call for each device.
80 *	@data:	Data to pass to the called function.
81 *
82 *	This performs a depth-first traversal of the tree, calling the
83 *	function passed for each node.  It calls the function for parents
84 *	before children.
85 */
86
87static int for_each_padev(int (*fn)(struct device *, void *), void * data)
88{
89	struct recurse_struct recurse_data = {
90		.obj	= data,
91		.fn	= fn,
92	};
93	return device_for_each_child(&root, &recurse_data, descend_children);
94}
95
96/**
97 * match_device - Report whether this driver can handle this device
98 * @driver: the PA-RISC driver to try
99 * @dev: the PA-RISC device to try
100 */
101static int match_device(struct parisc_driver *driver, struct parisc_device *dev)
102{
103	const struct parisc_device_id *ids;
104
105	for (ids = driver->id_table; ids->sversion; ids++) {
106		if ((ids->sversion != SVERSION_ANY_ID) &&
107		    (ids->sversion != dev->id.sversion))
108			continue;
109
110		if ((ids->hw_type != HWTYPE_ANY_ID) &&
111		    (ids->hw_type != dev->id.hw_type))
112			continue;
113
114		if ((ids->hversion != HVERSION_ANY_ID) &&
115		    (ids->hversion != dev->id.hversion))
116			continue;
117
118		return 1;
119	}
120	return 0;
121}
122
123static int parisc_driver_probe(struct device *dev)
124{
125	int rc;
126	struct parisc_device *pa_dev = to_parisc_device(dev);
127	struct parisc_driver *pa_drv = to_parisc_driver(dev->driver);
128
129	rc = pa_drv->probe(pa_dev);
130
131	if (!rc)
132		pa_dev->driver = pa_drv;
133
134	return rc;
135}
136
137static int parisc_driver_remove(struct device *dev)
138{
139	struct parisc_device *pa_dev = to_parisc_device(dev);
140	struct parisc_driver *pa_drv = to_parisc_driver(dev->driver);
141	if (pa_drv->remove)
142		pa_drv->remove(pa_dev);
143
144	return 0;
145}
146
147
148/**
149 * register_parisc_driver - Register this driver if it can handle a device
150 * @driver: the PA-RISC driver to try
151 */
152int register_parisc_driver(struct parisc_driver *driver)
153{
154	if(driver->drv.name) {
155		printk(KERN_WARNING
156		       "BUG: skipping previously registered driver %s\n",
157		       driver->name);
158		return 1;
159	}
160
161	if (!driver->probe) {
162		printk(KERN_WARNING
163		       "BUG: driver %s has no probe routine\n",
164		       driver->name);
165		return 1;
166	}
167
168	driver->drv.bus = &parisc_bus_type;
169
170	/* We install our own probe and remove routines */
171	WARN_ON(driver->drv.probe != NULL);
172	WARN_ON(driver->drv.remove != NULL);
173
174	driver->drv.name = driver->name;
175
176	return driver_register(&driver->drv);
177}
178EXPORT_SYMBOL(register_parisc_driver);
179
180
181struct match_count {
182	struct parisc_driver * driver;
183	int count;
184};
185
186static int match_and_count(struct device * dev, void * data)
187{
188	struct match_count * m = data;
189	struct parisc_device * pdev = to_parisc_device(dev);
190
191	if (check_dev(dev)) {
192		if (match_device(m->driver, pdev))
193			m->count++;
194	}
195	return 0;
196}
197
198/**
199 * count_parisc_driver - count # of devices this driver would match
200 * @driver: the PA-RISC driver to try
201 *
202 * Use by IOMMU support to "guess" the right size IOPdir.
203 * Formula is something like memsize/(num_iommu * entry_size).
204 */
205int count_parisc_driver(struct parisc_driver *driver)
206{
207	struct match_count m = {
208		.driver	= driver,
209		.count	= 0,
210	};
211
212	for_each_padev(match_and_count, &m);
213
214	return m.count;
215}
216
217
218
219/**
220 * unregister_parisc_driver - Unregister this driver from the list of drivers
221 * @driver: the PA-RISC driver to unregister
222 */
223int unregister_parisc_driver(struct parisc_driver *driver)
224{
225	driver_unregister(&driver->drv);
226	return 0;
227}
228EXPORT_SYMBOL(unregister_parisc_driver);
229
230struct find_data {
231	unsigned long hpa;
232	struct parisc_device * dev;
233};
234
235static int find_device(struct device * dev, void * data)
236{
237	struct parisc_device * pdev = to_parisc_device(dev);
238	struct find_data * d = (struct find_data*)data;
239
240	if (check_dev(dev)) {
241		if (pdev->hpa.start == d->hpa) {
242			d->dev = pdev;
243			return 1;
244		}
245	}
246	return 0;
247}
248
249static struct parisc_device *find_device_by_addr(unsigned long hpa)
250{
251	struct find_data d = {
252		.hpa	= hpa,
253	};
254	int ret;
255
256	ret = for_each_padev(find_device, &d);
257	return ret ? d.dev : NULL;
258}
259
260/**
261 * find_pa_parent_type - Find a parent of a specific type
262 * @dev: The device to start searching from
263 * @type: The device type to search for.
264 *
265 * Walks up the device tree looking for a device of the specified type.
266 * If it finds it, it returns it.  If not, it returns NULL.
267 */
268const struct parisc_device *
269find_pa_parent_type(const struct parisc_device *padev, int type)
270{
271	const struct device *dev = &padev->dev;
272	while (dev != &root) {
273		struct parisc_device *candidate = to_parisc_device(dev);
274		if (candidate->id.hw_type == type)
275			return candidate;
276		dev = dev->parent;
277	}
278
279	return NULL;
280}
281
282#ifdef CONFIG_PCI
283static inline int is_pci_dev(struct device *dev)
284{
285	return dev->bus == &pci_bus_type;
286}
287#else
288static inline int is_pci_dev(struct device *dev)
289{
290	return 0;
291}
292#endif
293
294/*
295 * get_node_path fills in @path with the firmware path to the device.
296 * Note that if @node is a parisc device, we don't fill in the 'mod' field.
297 * This is because both callers pass the parent and fill in the mod
298 * themselves.  If @node is a PCI device, we do fill it in, even though this
299 * is inconsistent.
300 */
301static void get_node_path(struct device *dev, struct hardware_path *path)
302{
303	int i = 5;
304	memset(&path->bc, -1, 6);
305
306	if (is_pci_dev(dev)) {
307		unsigned int devfn = to_pci_dev(dev)->devfn;
308		path->mod = PCI_FUNC(devfn);
309		path->bc[i--] = PCI_SLOT(devfn);
310		dev = dev->parent;
311	}
312
313	while (dev != &root) {
314		if (is_pci_dev(dev)) {
315			unsigned int devfn = to_pci_dev(dev)->devfn;
316			path->bc[i--] = PCI_SLOT(devfn) | (PCI_FUNC(devfn)<< 5);
317		} else if (dev->bus == &parisc_bus_type) {
318			path->bc[i--] = to_parisc_device(dev)->hw_path;
319		}
320		dev = dev->parent;
321	}
322}
323
324static char *print_hwpath(struct hardware_path *path, char *output)
325{
326	int i;
327	for (i = 0; i < 6; i++) {
328		if (path->bc[i] == -1)
329			continue;
330		output += sprintf(output, "%u/", (unsigned char) path->bc[i]);
331	}
332	output += sprintf(output, "%u", (unsigned char) path->mod);
333	return output;
334}
335
336/**
337 * print_pa_hwpath - Returns hardware path for PA devices
338 * dev: The device to return the path for
339 * output: Pointer to a previously-allocated array to place the path in.
340 *
341 * This function fills in the output array with a human-readable path
342 * to a PA device.  This string is compatible with that used by PDC, and
343 * may be printed on the outside of the box.
344 */
345char *print_pa_hwpath(struct parisc_device *dev, char *output)
346{
347	struct hardware_path path;
348
349	get_node_path(dev->dev.parent, &path);
350	path.mod = dev->hw_path;
351	return print_hwpath(&path, output);
352}
353EXPORT_SYMBOL(print_pa_hwpath);
354
355#if defined(CONFIG_PCI) || defined(CONFIG_ISA)
356/**
357 * get_pci_node_path - Determines the hardware path for a PCI device
358 * @pdev: The device to return the path for
359 * @path: Pointer to a previously-allocated array to place the path in.
360 *
361 * This function fills in the hardware_path structure with the route to
362 * the specified PCI device.  This structure is suitable for passing to
363 * PDC calls.
364 */
365void get_pci_node_path(struct pci_dev *pdev, struct hardware_path *path)
366{
367	get_node_path(&pdev->dev, path);
368}
369EXPORT_SYMBOL(get_pci_node_path);
370
371/**
372 * print_pci_hwpath - Returns hardware path for PCI devices
373 * dev: The device to return the path for
374 * output: Pointer to a previously-allocated array to place the path in.
375 *
376 * This function fills in the output array with a human-readable path
377 * to a PCI device.  This string is compatible with that used by PDC, and
378 * may be printed on the outside of the box.
379 */
380char *print_pci_hwpath(struct pci_dev *dev, char *output)
381{
382	struct hardware_path path;
383
384	get_pci_node_path(dev, &path);
385	return print_hwpath(&path, output);
386}
387EXPORT_SYMBOL(print_pci_hwpath);
388
389#endif /* defined(CONFIG_PCI) || defined(CONFIG_ISA) */
390
391static void setup_bus_id(struct parisc_device *padev)
392{
393	struct hardware_path path;
394	char *output = padev->dev.bus_id;
395	int i;
396
397	get_node_path(padev->dev.parent, &path);
398
399	for (i = 0; i < 6; i++) {
400		if (path.bc[i] == -1)
401			continue;
402		output += sprintf(output, "%u:", (unsigned char) path.bc[i]);
403	}
404	sprintf(output, "%u", (unsigned char) padev->hw_path);
405}
406
407struct parisc_device * create_tree_node(char id, struct device *parent)
408{
409	struct parisc_device *dev = kzalloc(sizeof(*dev), GFP_KERNEL);
410	if (!dev)
411		return NULL;
412
413	dev->hw_path = id;
414	dev->id.hw_type = HPHW_FAULTY;
415
416	dev->dev.parent = parent;
417	setup_bus_id(dev);
418
419	dev->dev.bus = &parisc_bus_type;
420	dev->dma_mask = 0xffffffffUL;	/* PARISC devices are 32-bit */
421
422	/* make the generic dma mask a pointer to the parisc one */
423	dev->dev.dma_mask = &dev->dma_mask;
424	dev->dev.coherent_dma_mask = dev->dma_mask;
425	if (device_register(&dev->dev)) {
426		kfree(dev);
427		return NULL;
428	}
429
430	return dev;
431}
432
433struct match_id_data {
434	char id;
435	struct parisc_device * dev;
436};
437
438static int match_by_id(struct device * dev, void * data)
439{
440	struct parisc_device * pdev = to_parisc_device(dev);
441	struct match_id_data * d = data;
442
443	if (pdev->hw_path == d->id) {
444		d->dev = pdev;
445		return 1;
446	}
447	return 0;
448}
449
450/**
451 * alloc_tree_node - returns a device entry in the iotree
452 * @parent: the parent node in the tree
453 * @id: the element of the module path for this entry
454 *
455 * Checks all the children of @parent for a matching @id.  If none
456 * found, it allocates a new device and returns it.
457 */
458static struct parisc_device * alloc_tree_node(struct device *parent, char id)
459{
460	struct match_id_data d = {
461		.id = id,
462	};
463	if (device_for_each_child(parent, &d, match_by_id))
464		return d.dev;
465	else
466		return create_tree_node(id, parent);
467}
468
469static struct parisc_device *create_parisc_device(struct hardware_path *modpath)
470{
471	int i;
472	struct device *parent = &root;
473	for (i = 0; i < 6; i++) {
474		if (modpath->bc[i] == -1)
475			continue;
476		parent = &alloc_tree_node(parent, modpath->bc[i])->dev;
477	}
478	return alloc_tree_node(parent, modpath->mod);
479}
480
481struct parisc_device *
482alloc_pa_dev(unsigned long hpa, struct hardware_path *mod_path)
483{
484	int status;
485	unsigned long bytecnt;
486	u8 iodc_data[32];
487	struct parisc_device *dev;
488	const char *name;
489
490	/* Check to make sure this device has not already been added - Ryan */
491	if (find_device_by_addr(hpa) != NULL)
492		return NULL;
493
494	status = pdc_iodc_read(&bytecnt, hpa, 0, &iodc_data, 32);
495	if (status != PDC_OK)
496		return NULL;
497
498	dev = create_parisc_device(mod_path);
499	if (dev->id.hw_type != HPHW_FAULTY) {
500		printk(KERN_ERR "Two devices have hardware path [%s].  "
501				"IODC data for second device: "
502				"%02x%02x%02x%02x%02x%02x\n"
503				"Rearranging GSC cards sometimes helps\n",
504			parisc_pathname(dev), iodc_data[0], iodc_data[1],
505			iodc_data[3], iodc_data[4], iodc_data[5], iodc_data[6]);
506		return NULL;
507	}
508
509	dev->id.hw_type = iodc_data[3] & 0x1f;
510	dev->id.hversion = (iodc_data[0] << 4) | ((iodc_data[1] & 0xf0) >> 4);
511	dev->id.hversion_rev = iodc_data[1] & 0x0f;
512	dev->id.sversion = ((iodc_data[4] & 0x0f) << 16) |
513			(iodc_data[5] << 8) | iodc_data[6];
514	dev->hpa.name = parisc_pathname(dev);
515	dev->hpa.start = hpa;
516	/* This is awkward.  The STI spec says that gfx devices may occupy
517	 * 32MB or 64MB.  Unfortunately, we don't know how to tell whether
518	 * it's the former or the latter.  Assumptions either way can hurt us.
519	 */
520	if (hpa == 0xf4000000 || hpa == 0xf8000000) {
521		dev->hpa.end = hpa + 0x03ffffff;
522	} else if (hpa == 0xf6000000 || hpa == 0xfa000000) {
523		dev->hpa.end = hpa + 0x01ffffff;
524	} else {
525		dev->hpa.end = hpa + 0xfff;
526	}
527	dev->hpa.flags = IORESOURCE_MEM;
528	name = parisc_hardware_description(&dev->id);
529	if (name) {
530		strlcpy(dev->name, name, sizeof(dev->name));
531	}
532
533	/* Silently fail things like mouse ports which are subsumed within
534	 * the keyboard controller
535	 */
536	if ((hpa & 0xfff) == 0 && insert_resource(&iomem_resource, &dev->hpa))
537		printk("Unable to claim HPA %lx for device %s\n",
538				hpa, name);
539
540	return dev;
541}
542
543static int parisc_generic_match(struct device *dev, struct device_driver *drv)
544{
545	return match_device(to_parisc_driver(drv), to_parisc_device(dev));
546}
547
548#define pa_dev_attr(name, field, format_string)				\
549static ssize_t name##_show(struct device *dev, struct device_attribute *attr, char *buf)		\
550{									\
551	struct parisc_device *padev = to_parisc_device(dev);		\
552	return sprintf(buf, format_string, padev->field);		\
553}
554
555#define pa_dev_attr_id(field, format) pa_dev_attr(field, id.field, format)
556
557pa_dev_attr(irq, irq, "%u\n");
558pa_dev_attr_id(hw_type, "0x%02x\n");
559pa_dev_attr(rev, id.hversion_rev, "0x%x\n");
560pa_dev_attr_id(hversion, "0x%03x\n");
561pa_dev_attr_id(sversion, "0x%05x\n");
562
563static ssize_t modalias_show(struct device *dev, struct device_attribute *attr, char *buf)
564{
565	struct parisc_device *padev = to_parisc_device(dev);
566	struct parisc_device_id *id = &padev->id;
567
568	return sprintf(buf, "parisc:t%02Xhv%04Xrev%02Xsv%08X\n",
569		(u8)id->hw_type, (u16)id->hversion, (u8)id->hversion_rev,
570		(u32)id->sversion);
571}
572
573static struct device_attribute parisc_device_attrs[] = {
574	__ATTR_RO(irq),
575	__ATTR_RO(hw_type),
576	__ATTR_RO(rev),
577	__ATTR_RO(hversion),
578	__ATTR_RO(sversion),
579	__ATTR_RO(modalias),
580	__ATTR_NULL,
581};
582
583struct bus_type parisc_bus_type = {
584	.name = "parisc",
585	.match = parisc_generic_match,
586	.dev_attrs = parisc_device_attrs,
587	.probe = parisc_driver_probe,
588	.remove = parisc_driver_remove,
589};
590
591/**
592 * register_parisc_device - Locate a driver to manage this device.
593 * @dev: The parisc device.
594 *
595 * Search the driver list for a driver that is willing to manage
596 * this device.
597 */
598int register_parisc_device(struct parisc_device *dev)
599{
600	if (!dev)
601		return 0;
602
603	if (dev->driver)
604		return 1;
605
606	return 0;
607}
608
609/**
610 * match_pci_device - Matches a pci device against a given hardware path
611 * entry.
612 * @dev: the generic device (known to be contained by a pci_dev).
613 * @index: the current BC index
614 * @modpath: the hardware path.
615 * @return: true if the device matches the hardware path.
616 */
617static int match_pci_device(struct device *dev, int index,
618		struct hardware_path *modpath)
619{
620	struct pci_dev *pdev = to_pci_dev(dev);
621	int id;
622
623	if (index == 5) {
624		/* we are at the end of the path, and on the actual device */
625		unsigned int devfn = pdev->devfn;
626		return ((modpath->bc[5] == PCI_SLOT(devfn)) &&
627					(modpath->mod == PCI_FUNC(devfn)));
628	}
629
630	id = PCI_SLOT(pdev->devfn) | (PCI_FUNC(pdev->devfn) << 5);
631	return (modpath->bc[index] == id);
632}
633
634/**
635 * match_parisc_device - Matches a parisc device against a given hardware
636 * path entry.
637 * @dev: the generic device (known to be contained by a parisc_device).
638 * @index: the current BC index
639 * @modpath: the hardware path.
640 * @return: true if the device matches the hardware path.
641 */
642static int match_parisc_device(struct device *dev, int index,
643		struct hardware_path *modpath)
644{
645	struct parisc_device *curr = to_parisc_device(dev);
646	char id = (index == 6) ? modpath->mod : modpath->bc[index];
647
648	return (curr->hw_path == id);
649}
650
651struct parse_tree_data {
652	int index;
653	struct hardware_path * modpath;
654	struct device * dev;
655};
656
657static int check_parent(struct device * dev, void * data)
658{
659	struct parse_tree_data * d = data;
660
661	if (check_dev(dev)) {
662		if (dev->bus == &parisc_bus_type) {
663			if (match_parisc_device(dev, d->index, d->modpath))
664				d->dev = dev;
665		} else if (is_pci_dev(dev)) {
666			if (match_pci_device(dev, d->index, d->modpath))
667				d->dev = dev;
668		} else if (dev->bus == NULL) {
669			/* we are on a bus bridge */
670			struct device *new = parse_tree_node(dev, d->index, d->modpath);
671			if (new)
672				d->dev = new;
673		}
674	}
675	return d->dev != NULL;
676}
677
678/**
679 * parse_tree_node - returns a device entry in the iotree
680 * @parent: the parent node in the tree
681 * @index: the current BC index
682 * @modpath: the hardware_path struct to match a device against
683 * @return: The corresponding device if found, NULL otherwise.
684 *
685 * Checks all the children of @parent for a matching @id.  If none
686 * found, it returns NULL.
687 */
688static struct device *
689parse_tree_node(struct device *parent, int index, struct hardware_path *modpath)
690{
691	struct parse_tree_data d = {
692		.index          = index,
693		.modpath        = modpath,
694	};
695
696	struct recurse_struct recurse_data = {
697		.obj	= &d,
698		.fn	= check_parent,
699	};
700
701	if (device_for_each_child(parent, &recurse_data, descend_children))
702		/* nothing */;
703
704	return d.dev;
705}
706
707/**
708 * hwpath_to_device - Finds the generic device corresponding to a given hardware path.
709 * @modpath: the hardware path.
710 * @return: The target device, NULL if not found.
711 */
712struct device *hwpath_to_device(struct hardware_path *modpath)
713{
714	int i;
715	struct device *parent = &root;
716	for (i = 0; i < 6; i++) {
717		if (modpath->bc[i] == -1)
718			continue;
719		parent = parse_tree_node(parent, i, modpath);
720		if (!parent)
721			return NULL;
722	}
723	if (is_pci_dev(parent)) /* pci devices already parse MOD */
724		return parent;
725	else
726		return parse_tree_node(parent, 6, modpath);
727}
728EXPORT_SYMBOL(hwpath_to_device);
729
730/**
731 * device_to_hwpath - Populates the hwpath corresponding to the given device.
732 * @param dev the target device
733 * @param path pointer to a previously allocated hwpath struct to be filled in
734 */
735void device_to_hwpath(struct device *dev, struct hardware_path *path)
736{
737	struct parisc_device *padev;
738	if (dev->bus == &parisc_bus_type) {
739		padev = to_parisc_device(dev);
740		get_node_path(dev->parent, path);
741		path->mod = padev->hw_path;
742	} else if (is_pci_dev(dev)) {
743		get_node_path(dev, path);
744	}
745}
746EXPORT_SYMBOL(device_to_hwpath);
747
748#define BC_PORT_MASK 0x8
749#define BC_LOWER_PORT 0x8
750
751#define BUS_CONVERTER(dev) \
752        ((dev->id.hw_type == HPHW_IOA) || (dev->id.hw_type == HPHW_BCPORT))
753
754#define IS_LOWER_PORT(dev) \
755        ((gsc_readl(dev->hpa.start + offsetof(struct bc_module, io_status)) \
756                & BC_PORT_MASK) == BC_LOWER_PORT)
757
758#define MAX_NATIVE_DEVICES 64
759#define NATIVE_DEVICE_OFFSET 0x1000
760
761#define FLEX_MASK 	F_EXTEND(0xfffc0000)
762#define IO_IO_LOW	offsetof(struct bc_module, io_io_low)
763#define IO_IO_HIGH	offsetof(struct bc_module, io_io_high)
764#define READ_IO_IO_LOW(dev)  (unsigned long)(signed int)gsc_readl(dev->hpa.start + IO_IO_LOW)
765#define READ_IO_IO_HIGH(dev) (unsigned long)(signed int)gsc_readl(dev->hpa.start + IO_IO_HIGH)
766
767static void walk_native_bus(unsigned long io_io_low, unsigned long io_io_high,
768                            struct device *parent);
769
770void walk_lower_bus(struct parisc_device *dev)
771{
772	unsigned long io_io_low, io_io_high;
773
774	if (!BUS_CONVERTER(dev) || IS_LOWER_PORT(dev))
775		return;
776
777	if (dev->id.hw_type == HPHW_IOA) {
778		io_io_low = (unsigned long)(signed int)(READ_IO_IO_LOW(dev) << 16);
779		io_io_high = io_io_low + MAX_NATIVE_DEVICES * NATIVE_DEVICE_OFFSET;
780	} else {
781		io_io_low = (READ_IO_IO_LOW(dev) + ~FLEX_MASK) & FLEX_MASK;
782		io_io_high = (READ_IO_IO_HIGH(dev)+ ~FLEX_MASK) & FLEX_MASK;
783	}
784
785	walk_native_bus(io_io_low, io_io_high, &dev->dev);
786}
787
788/**
789 * walk_native_bus -- Probe a bus for devices
790 * @io_io_low: Base address of this bus.
791 * @io_io_high: Last address of this bus.
792 * @parent: The parent bus device.
793 *
794 * A native bus (eg Runway or GSC) may have up to 64 devices on it,
795 * spaced at intervals of 0x1000 bytes.  PDC may not inform us of these
796 * devices, so we have to probe for them.  Unfortunately, we may find
797 * devices which are not physically connected (such as extra serial &
798 * keyboard ports).  This problem is not yet solved.
799 */
800static void walk_native_bus(unsigned long io_io_low, unsigned long io_io_high,
801                            struct device *parent)
802{
803	int i, devices_found = 0;
804	unsigned long hpa = io_io_low;
805	struct hardware_path path;
806
807	get_node_path(parent, &path);
808	do {
809		for(i = 0; i < MAX_NATIVE_DEVICES; i++, hpa += NATIVE_DEVICE_OFFSET) {
810			struct parisc_device *dev;
811
812			/* Was the device already added by Firmware? */
813			dev = find_device_by_addr(hpa);
814			if (!dev) {
815				path.mod = i;
816				dev = alloc_pa_dev(hpa, &path);
817				if (!dev)
818					continue;
819
820				register_parisc_device(dev);
821				devices_found++;
822			}
823			walk_lower_bus(dev);
824		}
825	} while(!devices_found && hpa < io_io_high);
826}
827
828#define CENTRAL_BUS_ADDR F_EXTEND(0xfff80000)
829
830/**
831 * walk_central_bus - Find devices attached to the central bus
832 *
833 * PDC doesn't tell us about all devices in the system.  This routine
834 * finds devices connected to the central bus.
835 */
836void walk_central_bus(void)
837{
838	walk_native_bus(CENTRAL_BUS_ADDR,
839			CENTRAL_BUS_ADDR + (MAX_NATIVE_DEVICES * NATIVE_DEVICE_OFFSET),
840			&root);
841}
842
843static void print_parisc_device(struct parisc_device *dev)
844{
845	char hw_path[64];
846	static int count;
847
848	print_pa_hwpath(dev, hw_path);
849	printk(KERN_INFO "%d. %s at 0x%p [%s] { %d, 0x%x, 0x%.3x, 0x%.5x }",
850		++count, dev->name, (void*) dev->hpa.start, hw_path, dev->id.hw_type,
851		dev->id.hversion_rev, dev->id.hversion, dev->id.sversion);
852
853	if (dev->num_addrs) {
854		int k;
855		printk(", additional addresses: ");
856		for (k = 0; k < dev->num_addrs; k++)
857			printk("0x%lx ", dev->addr[k]);
858	}
859	printk("\n");
860}
861
862/**
863 * init_parisc_bus - Some preparation to be done before inventory
864 */
865void init_parisc_bus(void)
866{
867	if (bus_register(&parisc_bus_type))
868		panic("Could not register PA-RISC bus type\n");
869	if (device_register(&root))
870		panic("Could not register PA-RISC root device\n");
871	get_device(&root);
872}
873
874
875static int print_one_device(struct device * dev, void * data)
876{
877	struct parisc_device * pdev = to_parisc_device(dev);
878
879	if (check_dev(dev))
880		print_parisc_device(pdev);
881	return 0;
882}
883
884/**
885 * print_parisc_devices - Print out a list of devices found in this system
886 */
887void print_parisc_devices(void)
888{
889	for_each_padev(print_one_device, NULL);
890}
891