1#ifndef _DEV_H
2#define _DEV_H
3
4#include "isa.h"
5#include "pci.h"
6
7/* Need to check the packing of this struct if Etherboot is ported */
8struct dev_id
9{
10	unsigned short	vendor_id;
11	unsigned short	device_id;
12	unsigned char	bus_type;
13#define	PCI_BUS_TYPE	1
14#define	ISA_BUS_TYPE	2
15};
16
17/* Dont use sizeof, that will include the padding */
18#define	DEV_ID_SIZE	8
19
20
21struct pci_probe_state
22{
23#ifdef CONFIG_PCI
24	struct pci_device dev;
25	int advance;
26#else
27	int dummy;
28#endif
29};
30struct isa_probe_state
31{
32#ifdef CONFIG_ISA
33	const struct isa_driver *driver;
34	int advance;
35#else
36	int dummy;
37#endif
38};
39
40union probe_state
41{
42	struct pci_probe_state pci;
43	struct isa_probe_state isa;
44};
45
46struct dev
47{
48	void		(*disable)P((struct dev *));
49	struct dev_id	devid;	/* device ID string (sent to DHCP server) */
50	int		index;  /* Index of next device on this controller to probe */
51	int		type;		/* Type of device I am probing for */
52	int		how_probe;	/* First, next or awake */
53	int 		to_probe;	/* Flavor of device I am probing */
54	int		failsafe;	/* Failsafe probe requested */
55	int		type_index;	/* Index of this device (within type) */
56#define	PROBE_NONE 0
57#define PROBE_PCI  1
58#define PROBE_ISA  2
59	union probe_state state;
60};
61
62
63#define NIC_DRIVER    0
64#define DISK_DRIVER   1
65#define FLOPPY_DRIVER 2
66
67#define BRIDGE_DRIVER 1000
68
69#define PROBE_FIRST  (-1)
70#define PROBE_NEXT   0
71#define PROBE_AWAKE  1		/* After calling disable bring up the same device */
72
73/* The probe result codes are selected
74 * to allow them to be fed back into the probe
75 * routine and get a successful probe.
76 */
77#define PROBE_FAILED PROBE_FIRST
78#define PROBE_WORKED  PROBE_NEXT
79
80extern int probe(struct dev *dev);
81extern void disable(struct dev *dev);
82
83#endif /* _DEV_H */
84