Eric Biederman | 9b4336c | 2003-07-19 04:28:22 +0000 | [diff] [blame] | 1 | #ifndef DEVICE_PNP_H |
| 2 | #define DEVICE_PNP_H |
| 3 | |
Eric Biederman | 5cd8173 | 2004-03-11 15:01:31 +0000 | [diff] [blame] | 4 | #include <stdint.h> |
Kyösti Mälkki | e8792be | 2014-02-26 15:19:04 +0200 | [diff] [blame] | 5 | #include <rules.h> |
Eric Biederman | 5cd8173 | 2004-03-11 15:01:31 +0000 | [diff] [blame] | 6 | #include <device/device.h> |
| 7 | #include <device/pnp_def.h> |
Eric Biederman | 9b4336c | 2003-07-19 04:28:22 +0000 | [diff] [blame] | 8 | |
Kyösti Mälkki | ef84401 | 2013-06-25 23:17:43 +0300 | [diff] [blame] | 9 | #ifndef __SIMPLE_DEVICE__ |
| 10 | |
Uwe Hermann | d453dd0 | 2010-10-18 00:00:57 +0000 | [diff] [blame] | 11 | /* Primitive PNP resource manipulation */ |
| 12 | void pnp_write_config(device_t dev, u8 reg, u8 value); |
| 13 | u8 pnp_read_config(device_t dev, u8 reg); |
| 14 | void pnp_set_logical_device(device_t dev); |
| 15 | void pnp_set_enable(device_t dev, int enable); |
| 16 | int pnp_read_enable(device_t dev); |
| 17 | void pnp_set_iobase(device_t dev, u8 index, u16 iobase); |
| 18 | void pnp_set_irq(device_t dev, u8 index, u8 irq); |
| 19 | void pnp_set_drq(device_t dev, u8 index, u8 drq); |
Eric Biederman | 9b4336c | 2003-07-19 04:28:22 +0000 | [diff] [blame] | 20 | |
Eric Biederman | 5cd8173 | 2004-03-11 15:01:31 +0000 | [diff] [blame] | 21 | /* PNP device operations */ |
| 22 | void pnp_read_resources(device_t dev); |
| 23 | void pnp_set_resources(device_t dev); |
| 24 | void pnp_enable_resources(device_t dev); |
| 25 | void pnp_enable(device_t dev); |
Nico Huber | f898f7b | 2013-06-10 22:57:12 +0200 | [diff] [blame] | 26 | void pnp_alt_enable(device_t dev); |
Eric Biederman | 9b4336c | 2003-07-19 04:28:22 +0000 | [diff] [blame] | 27 | |
Stefan Reinauer | be7f798 | 2009-03-13 15:42:27 +0000 | [diff] [blame] | 28 | extern struct device_operations pnp_ops; |
Eric Biederman | 9b4336c | 2003-07-19 04:28:22 +0000 | [diff] [blame] | 29 | |
Eric Biederman | 5cd8173 | 2004-03-11 15:01:31 +0000 | [diff] [blame] | 30 | /* PNP helper operations */ |
Eric Biederman | 9b4336c | 2003-07-19 04:28:22 +0000 | [diff] [blame] | 31 | |
Eric Biederman | 5cd8173 | 2004-03-11 15:01:31 +0000 | [diff] [blame] | 32 | struct io_info { |
| 33 | unsigned mask, set; |
| 34 | }; |
Eric Biederman | 9b4336c | 2003-07-19 04:28:22 +0000 | [diff] [blame] | 35 | |
Eric Biederman | 5cd8173 | 2004-03-11 15:01:31 +0000 | [diff] [blame] | 36 | struct pnp_info { |
| 37 | struct device_operations *ops; |
Uwe Hermann | 3a4ed15 | 2010-12-05 22:36:14 +0000 | [diff] [blame] | 38 | unsigned int function; /* Must be at least 16 bits (virtual LDNs)! */ |
Uwe Hermann | d453dd0 | 2010-10-18 00:00:57 +0000 | [diff] [blame] | 39 | unsigned int flags; |
Stefan Reinauer | de3206a | 2010-02-22 06:09:43 +0000 | [diff] [blame] | 40 | #define PNP_IO0 0x001 |
| 41 | #define PNP_IO1 0x002 |
| 42 | #define PNP_IO2 0x004 |
| 43 | #define PNP_IO3 0x008 |
| 44 | #define PNP_IRQ0 0x010 |
| 45 | #define PNP_IRQ1 0x020 |
| 46 | #define PNP_DRQ0 0x040 |
| 47 | #define PNP_DRQ1 0x080 |
| 48 | #define PNP_EN 0x100 |
| 49 | #define PNP_MSC0 0x200 |
| 50 | #define PNP_MSC1 0x400 |
Stefan Reinauer | 0108b93 | 2013-12-11 11:06:08 -0800 | [diff] [blame] | 51 | #define PNP_MSC4 0x800 |
| 52 | #define PNP_MSC10 0x1000 |
Eric Biederman | b78c197 | 2004-10-14 20:54:17 +0000 | [diff] [blame] | 53 | struct io_info io0, io1, io2, io3; |
Eric Biederman | 5cd8173 | 2004-03-11 15:01:31 +0000 | [diff] [blame] | 54 | }; |
| 55 | struct resource *pnp_get_resource(device_t dev, unsigned index); |
Eric Biederman | 7003ba4 | 2004-10-16 06:20:29 +0000 | [diff] [blame] | 56 | void pnp_enable_devices(struct device *dev, struct device_operations *ops, |
Uwe Hermann | d453dd0 | 2010-10-18 00:00:57 +0000 | [diff] [blame] | 57 | unsigned int functions, struct pnp_info *info); |
Eric Biederman | 9b4336c | 2003-07-19 04:28:22 +0000 | [diff] [blame] | 58 | |
Nico Huber | dd4715b | 2013-06-10 22:08:35 +0200 | [diff] [blame] | 59 | struct pnp_mode_ops { |
| 60 | void (*enter_conf_mode)(device_t dev); |
| 61 | void (*exit_conf_mode)(device_t dev); |
| 62 | }; |
| 63 | void pnp_enter_conf_mode(device_t dev); |
| 64 | void pnp_exit_conf_mode(device_t dev); |
| 65 | |
Kyösti Mälkki | ef84401 | 2013-06-25 23:17:43 +0300 | [diff] [blame] | 66 | #endif /* ! __SIMPLE_DEVICE__ */ |
Eric Biederman | 9b4336c | 2003-07-19 04:28:22 +0000 | [diff] [blame] | 67 | #endif /* DEVICE_PNP_H */ |