]>
Commit | Line | Data |
---|---|---|
9bd1aa8a SG |
1 | /* SPDX-License-Identifier: GPL-2.0+ */ |
2 | /* | |
3 | * sandbox host uclass | |
4 | * | |
5 | * Copyright 2022 Google LLC | |
6 | */ | |
7 | ||
8 | #ifndef __SANDBOX_HOST__ | |
9 | #define __SANDBOX_HOST__ | |
10 | ||
11 | /** | |
12 | * struct host_sb_plat - platform data for a host device | |
13 | * | |
14 | * @label: Label for this device (allocated) | |
15 | * @filename: Name of file this is attached to, or NULL (allocated) | |
16 | * @fd: File descriptor of file, or 0 for none (file is not open) | |
17 | */ | |
18 | struct host_sb_plat { | |
19 | char *label; | |
20 | char *filename; | |
21 | int fd; | |
22 | }; | |
23 | ||
24 | /** | |
25 | * struct host_ops - operations supported by UCLASS_HOST | |
9bd1aa8a SG |
26 | */ |
27 | struct host_ops { | |
dd706c83 HS |
28 | /** |
29 | * @attach_file: - Attach a new file to the device | |
9bd1aa8a | 30 | * |
dd706c83 HS |
31 | * @attach_file.dev: Device to update |
32 | * @attach_file.filename: Name of the file, e.g. "/path/to/disk.img" | |
33 | * @attach_file.Returns: 0 if OK, -EEXIST if a file is already attached, other -ve on | |
9bd1aa8a SG |
34 | * other error |
35 | */ | |
36 | int (*attach_file)(struct udevice *dev, const char *filename); | |
37 | ||
38 | /** | |
dd706c83 | 39 | * @detach_file: - Detach a file from the device |
9bd1aa8a | 40 | * |
dd706c83 HS |
41 | * @detach_file.dev: Device to detach from |
42 | * @detach_file.Returns: 0 if OK, -ENOENT if no file is attached, other -ve on other | |
9bd1aa8a SG |
43 | * error |
44 | */ | |
45 | int (*detach_file)(struct udevice *dev); | |
46 | }; | |
47 | ||
48 | #define host_get_ops(dev) ((struct host_ops *)(dev)->driver->ops) | |
49 | ||
50 | /** | |
51 | * host_attach_file() - Attach a new file to the device | |
52 | * | |
53 | * @dev: Device to update | |
54 | * @filename: Name of the file, e.g. "/path/to/disk.img" | |
55 | * Returns: 0 if OK, -EEXIST if a file is already attached, other -ve on | |
56 | * other error | |
57 | */ | |
58 | int host_attach_file(struct udevice *dev, const char *filename); | |
59 | ||
60 | /** | |
61 | * host_detach_file() - Detach a file from the device | |
62 | * | |
63 | * @dev: Device to detach from | |
64 | * Returns: 0 if OK, -ENOENT if no file is attached, other -ve on other | |
65 | * error | |
66 | */ | |
67 | int host_detach_file(struct udevice *dev); | |
68 | ||
69 | /** | |
70 | * host_create_device() - Create a new host device | |
71 | * | |
72 | * Any existing device with the same label is removed and unbound first | |
73 | * | |
74 | * @label: Label of the attachment, e.g. "test1" | |
75 | * @removable: true if the device should be marked as removable, false | |
76 | * if it is fixed. See enum blk_flag_t | |
8897faba | 77 | * @blksz: logical block size of the device |
9bd1aa8a SG |
78 | * @devp: Returns the device created, on success |
79 | * Returns: 0 if OK, -ve on error | |
80 | */ | |
8897faba | 81 | int host_create_device(const char *label, bool removable, unsigned long blksz, |
9bd1aa8a SG |
82 | struct udevice **devp); |
83 | ||
84 | /** | |
85 | * host_create_attach_file() - Create a new host device attached to a file | |
86 | * | |
87 | * @label: Label of the attachment, e.g. "test1" | |
88 | * @filename: Name of the file, e.g. "/path/to/disk.img" | |
89 | * @removable: true if the device should be marked as removable, false | |
90 | * if it is fixed. See enum blk_flag_t | |
8897faba | 91 | * @blksz: logical block size of the device |
9bd1aa8a SG |
92 | * @devp: Returns the device created, on success |
93 | * Returns: 0 if OK, -ve on error | |
94 | */ | |
95 | int host_create_attach_file(const char *label, const char *filename, | |
8897faba BM |
96 | bool removable, unsigned long blksz, |
97 | struct udevice **devp); | |
9bd1aa8a SG |
98 | |
99 | /** | |
100 | * host_find_by_label() - Find a host by label | |
101 | * | |
102 | * Searches all host devices to find one with the given label | |
103 | * | |
104 | * @label: Label to find | |
105 | * Returns: associated device, or NULL if not found | |
106 | */ | |
107 | struct udevice *host_find_by_label(const char *label); | |
108 | ||
109 | /** | |
110 | * host_get_cur_dev() - Get the current device | |
111 | * | |
112 | * Returns current device, or NULL if none | |
113 | */ | |
114 | struct udevice *host_get_cur_dev(void); | |
115 | ||
116 | /** | |
117 | * host_set_cur_dev() - Set the current device | |
118 | * | |
119 | * Sets the current device, or clears it if @dev is NULL | |
120 | * | |
121 | * @dev: Device to set as the current one | |
122 | */ | |
123 | void host_set_cur_dev(struct udevice *dev); | |
124 | ||
125 | #endif /* __SANDBOX_HOST__ */ |