blob: d0d6fa36a928d40a8a9ef28edf6aed25ed073e5a [file] [log] [blame]
Eric Biederman9b4336c2003-07-19 04:28:22 +00001#ifndef DEVICE_PNP_H
2#define DEVICE_PNP_H
3
Eric Biederman5cd81732004-03-11 15:01:31 +00004#include <stdint.h>
Kyösti Mälkkie8792be2014-02-26 15:19:04 +02005#include <rules.h>
Eric Biederman5cd81732004-03-11 15:01:31 +00006#include <device/device.h>
7#include <device/pnp_def.h>
Eric Biederman9b4336c2003-07-19 04:28:22 +00008
Kyösti Mälkkief844012013-06-25 23:17:43 +03009#ifndef __SIMPLE_DEVICE__
10
Uwe Hermannd453dd02010-10-18 00:00:57 +000011/* Primitive PNP resource manipulation */
12void pnp_write_config(device_t dev, u8 reg, u8 value);
13u8 pnp_read_config(device_t dev, u8 reg);
14void pnp_set_logical_device(device_t dev);
15void pnp_set_enable(device_t dev, int enable);
16int pnp_read_enable(device_t dev);
17void pnp_set_iobase(device_t dev, u8 index, u16 iobase);
18void pnp_set_irq(device_t dev, u8 index, u8 irq);
19void pnp_set_drq(device_t dev, u8 index, u8 drq);
Eric Biederman9b4336c2003-07-19 04:28:22 +000020
Eric Biederman5cd81732004-03-11 15:01:31 +000021/* PNP device operations */
22void pnp_read_resources(device_t dev);
23void pnp_set_resources(device_t dev);
24void pnp_enable_resources(device_t dev);
25void pnp_enable(device_t dev);
Nico Huberf898f7b2013-06-10 22:57:12 +020026void pnp_alt_enable(device_t dev);
Eric Biederman9b4336c2003-07-19 04:28:22 +000027
Stefan Reinauerbe7f7982009-03-13 15:42:27 +000028extern struct device_operations pnp_ops;
Eric Biederman9b4336c2003-07-19 04:28:22 +000029
Eric Biederman5cd81732004-03-11 15:01:31 +000030/* PNP helper operations */
Eric Biederman9b4336c2003-07-19 04:28:22 +000031
Eric Biederman5cd81732004-03-11 15:01:31 +000032struct io_info {
33 unsigned mask, set;
34};
Eric Biederman9b4336c2003-07-19 04:28:22 +000035
Eric Biederman5cd81732004-03-11 15:01:31 +000036struct pnp_info {
37 struct device_operations *ops;
Uwe Hermann3a4ed152010-12-05 22:36:14 +000038 unsigned int function; /* Must be at least 16 bits (virtual LDNs)! */
Uwe Hermannd453dd02010-10-18 00:00:57 +000039 unsigned int flags;
Stefan Reinauerde3206a2010-02-22 06:09:43 +000040#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 Reinauer0108b932013-12-11 11:06:08 -080051#define PNP_MSC4 0x800
52#define PNP_MSC10 0x1000
Eric Biedermanb78c1972004-10-14 20:54:17 +000053 struct io_info io0, io1, io2, io3;
Eric Biederman5cd81732004-03-11 15:01:31 +000054};
55struct resource *pnp_get_resource(device_t dev, unsigned index);
Eric Biederman7003ba42004-10-16 06:20:29 +000056void pnp_enable_devices(struct device *dev, struct device_operations *ops,
Uwe Hermannd453dd02010-10-18 00:00:57 +000057 unsigned int functions, struct pnp_info *info);
Eric Biederman9b4336c2003-07-19 04:28:22 +000058
Nico Huberdd4715b2013-06-10 22:08:35 +020059struct pnp_mode_ops {
60 void (*enter_conf_mode)(device_t dev);
61 void (*exit_conf_mode)(device_t dev);
62};
63void pnp_enter_conf_mode(device_t dev);
64void pnp_exit_conf_mode(device_t dev);
65
Kyösti Mälkkief844012013-06-25 23:17:43 +030066#endif /* ! __SIMPLE_DEVICE__ */
Eric Biederman9b4336c2003-07-19 04:28:22 +000067#endif /* DEVICE_PNP_H */