blob: b57be454a4fc35bc1ff5dad911fe0d466bde081d [file] [log] [blame]
Angel Pons32859fc2020-04-02 23:48:27 +02001/* SPDX-License-Identifier: GPL-2.0-only */
Kyösti Mälkki3855c012019-03-03 08:45:19 +02002
3#ifndef __DEVICE_PNP_OPS_H__
4#define __DEVICE_PNP_OPS_H__
5
Kyösti Mälkki3ee8b752019-03-03 00:35:15 +02006#include <stdint.h>
Angel Pons4c466c92020-06-05 19:00:41 +02007#include <device/pnp.h>
Kyösti Mälkki3ee8b752019-03-03 00:35:15 +02008
Kyösti Mälkki0f639752019-09-27 12:01:15 +03009#if ENV_PNP_SIMPLE_DEVICE
Kyösti Mälkki3ee8b752019-03-03 00:35:15 +020010
11static __always_inline void pnp_write_config(
12 pnp_devfn_t dev, uint8_t reg, uint8_t value)
13{
Angel Pons4c466c92020-06-05 19:00:41 +020014 pnp_write_index(dev >> 8, reg, value);
Kyösti Mälkki3ee8b752019-03-03 00:35:15 +020015}
16
17static __always_inline uint8_t pnp_read_config(
18 pnp_devfn_t dev, uint8_t reg)
19{
Angel Pons4c466c92020-06-05 19:00:41 +020020 return pnp_read_index(dev >> 8, reg);
Kyösti Mälkki3ee8b752019-03-03 00:35:15 +020021}
22
Angel Pons64a6b6c2020-06-05 19:10:03 +020023static __always_inline void pnp_unset_and_set_config(
24 pnp_devfn_t dev, uint8_t reg, uint8_t unset, uint8_t set)
25{
26 pnp_unset_and_set_index(dev >> 8, reg, unset, set);
27}
28
Kyösti Mälkki3ee8b752019-03-03 00:35:15 +020029static __always_inline
30void pnp_set_logical_device(pnp_devfn_t dev)
31{
32 unsigned int device = dev & 0xff;
33 pnp_write_config(dev, 0x07, device);
34}
35
36static __always_inline
37void pnp_set_enable(pnp_devfn_t dev, int enable)
38{
Elyes HAOUAS79a3de12020-08-26 19:52:40 +020039 pnp_write_config(dev, PNP_IDX_EN, enable?0x1:0x0);
Kyösti Mälkki3ee8b752019-03-03 00:35:15 +020040}
41
42static __always_inline
43int pnp_read_enable(pnp_devfn_t dev)
44{
Elyes HAOUAS79a3de12020-08-26 19:52:40 +020045 return !!pnp_read_config(dev, PNP_IDX_EN);
Kyösti Mälkki3ee8b752019-03-03 00:35:15 +020046}
47
48static __always_inline
49void pnp_set_iobase(pnp_devfn_t dev, unsigned int index, unsigned int iobase)
50{
51 pnp_write_config(dev, index + 0, (iobase >> 8) & 0xff);
52 pnp_write_config(dev, index + 1, iobase & 0xff);
53}
54
55static __always_inline
56uint16_t pnp_read_iobase(pnp_devfn_t dev, unsigned int index)
57{
58 return ((uint16_t)(pnp_read_config(dev, index)) << 8)
59 | pnp_read_config(dev, index + 1);
60}
61
62static __always_inline
63void pnp_set_irq(pnp_devfn_t dev, unsigned int index, unsigned int irq)
64{
65 pnp_write_config(dev, index, irq);
66}
67
68static __always_inline
69void pnp_set_drq(pnp_devfn_t dev, unsigned int index, unsigned int drq)
70{
71 pnp_write_config(dev, index, drq & 0xff);
72}
73
Kyösti Mälkki0f639752019-09-27 12:01:15 +030074#endif
Kyösti Mälkki3855c012019-03-03 08:45:19 +020075
76#endif