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 */
8 struct 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 
21 struct pci_probe_state
22 {
23 #ifdef CONFIG_PCI
24 	struct pci_device dev;
25 	int advance;
26 #else
27 	int dummy;
28 #endif
29 };
30 struct 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 
40 union probe_state
41 {
42 	struct pci_probe_state pci;
43 	struct isa_probe_state isa;
44 };
45 
46 struct 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 
80 extern int probe(struct dev *dev);
81 extern void disable(struct dev *dev);
82 
83 #endif /* _DEV_H */
84