Commit | Line | Data |
---|---|---|
a63e54ab MS |
1 | /* SPDX-License-Identifier: GPL-2.0+ */ |
2 | /* | |
9a8bcabd MS |
3 | * (C) Copyright 2017, 2018 |
4 | * Mario Six, Guntermann & Drunck GmbH, mario.six@gdsys.cc | |
a63e54ab MS |
5 | */ |
6 | ||
7 | #ifndef _AXI_H_ | |
8 | #define _AXI_H_ | |
9 | ||
401d1c4f SG |
10 | struct udevice; |
11 | ||
9a8bcabd MS |
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 | */ | |
a63e54ab MS |
18 | enum axi_size_t { |
19 | AXI_SIZE_8, | |
20 | AXI_SIZE_16, | |
21 | AXI_SIZE_32, | |
22 | }; | |
23 | ||
a63e54ab MS |
24 | struct axi_ops { |
25 | /** | |
26 | * read() - Read a single value from a specified address on a AXI bus | |
a63e54ab MS |
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. | |
9a8bcabd MS |
32 | * |
33 | * Return: 0 if OK, -ve on error. | |
a63e54ab MS |
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 | |
a63e54ab MS |
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. | |
9a8bcabd MS |
45 | * |
46 | * Return 0 if OK, -ve on error. | |
a63e54ab MS |
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 | |
a63e54ab MS |
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. | |
9a8bcabd MS |
61 | * |
62 | * Return: 0 if OK, -ve on error. | |
a63e54ab MS |
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 | |
a63e54ab MS |
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. | |
9a8bcabd MS |
74 | * |
75 | * Return: 0 if OK, -ve on error. | |
a63e54ab MS |
76 | */ |
77 | int axi_write(struct udevice *dev, ulong address, void *data, | |
78 | enum axi_size_t size); | |
9a8bcabd MS |
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 | ||
a63e54ab | 120 | #endif |