Merge branch 'master' of git://git.denx.de/u-boot
[platform/kernel/u-boot.git] / include / axi.h
1 /* SPDX-License-Identifier: GPL-2.0+ */
2 /*
3  * (C) Copyright 2017, 2018
4  * Mario Six, Guntermann & Drunck GmbH, mario.six@gdsys.cc
5  */
6
7 #ifndef _AXI_H_
8 #define _AXI_H_
9
10 struct udevice;
11
12 /**
13  * enum axi_size_t - Determine size of AXI transfer
14  * @AXI_SIZE_8:  AXI sransfer is 8-bit wide
15  * @AXI_SIZE_16: AXI sransfer is 16-bit wide
16  * @AXI_SIZE_32: AXI sransfer is 32-bit wide
17  */
18 enum axi_size_t {
19         AXI_SIZE_8,
20         AXI_SIZE_16,
21         AXI_SIZE_32,
22 };
23
24 struct axi_ops {
25         /**
26          * read() - Read a single value from a specified address on a AXI bus
27          * @dev:        AXI bus to read from.
28          * @address:    The address to read from.
29          * @data:       Pointer to a variable that takes the data value read
30          *              from the address on the AXI bus.
31          * @size:       The size of the data to be read.
32          *
33          * Return: 0 if OK, -ve on error.
34          */
35         int (*read)(struct udevice *dev, ulong address, void *data,
36                     enum axi_size_t size);
37
38         /**
39          * write() - Write a single value to a specified address on a AXI bus
40          * @dev:        AXI bus to write to.
41          * @address:    The address to write to.
42          * @data:       Pointer to the data value to be written to the address
43          *              on the AXI bus.
44          * @size:       The size of the data to write.
45          *
46          * Return 0 if OK, -ve on error.
47          */
48         int (*write)(struct udevice *dev, ulong address, void *data,
49                      enum axi_size_t size);
50 };
51
52 #define axi_get_ops(dev)        ((struct axi_ops *)(dev)->driver->ops)
53
54 /**
55  * axi_read() - Read a single value from a specified address on a AXI bus
56  * @dev:        AXI bus to read from.
57  * @address:    The address to read from.
58  * @data:       Pointer to a variable that takes the data value read from the
59  *              address on the AXI bus.
60  * @size:       The size of the data to write.
61  *
62  * Return: 0 if OK, -ve on error.
63  */
64 int axi_read(struct udevice *dev, ulong address, void *data,
65              enum axi_size_t size);
66
67 /**
68  * axi_write() - Write a single value to a specified address on a AXI bus
69  * @dev:        AXI bus to write to.
70  * @address:    The address to write to.
71  * @data:       Pointer to the data value to be written to the address on the
72  *              AXI bus.
73  * @size:       The size of the data to write.
74  *
75  * Return: 0 if OK, -ve on error.
76  */
77 int axi_write(struct udevice *dev, ulong address, void *data,
78               enum axi_size_t size);
79
80 struct axi_emul_ops {
81         /**
82          * read() - Read a single value from a specified address on a AXI bus
83          * @dev:        AXI bus to read from.
84          * @address:    The address to read from.
85          * @data:       Pointer to a variable that takes the data value read
86          *              from the address on the AXI bus.
87          * @size:       The size of the data to be read.
88          *
89          * Return: 0 if OK, -ve on error.
90          */
91         int (*read)(struct udevice *dev, ulong address, void *data,
92                     enum axi_size_t size);
93
94         /**
95          * write() - Write a single value to a specified address on a AXI bus
96          * @dev:        AXI bus to write to.
97          * @address:    The address to write to.
98          * @data:       Pointer to the data value to be written to the address
99          *              on the AXI bus.
100          * @size:       The size of the data to write.
101          *
102          * Return: 0 if OK, -ve on error.
103          */
104         int (*write)(struct udevice *dev, ulong address, void *data,
105                      enum axi_size_t size);
106
107         /**
108          * get_store() - Get address of internal storage of a emulated AXI
109          *               device
110          * @dev:        Emulated AXI device to get the pointer of the internal
111          *              storage for.
112          * @storep:     Pointer to the internal storage of the emulated AXI
113          *              device.
114          *
115          * Return: 0 if OK, -ve on error.
116          */
117         int (*get_store)(struct udevice *dev, u8 **storep);
118 };
119
120 #endif