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