blob: f7a5fc67230069b4d00a68c1d77c9e57eb37d96b [file] [log] [blame]
Simon Glass884c2f82022-10-29 19:47:15 -06001/* 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 */
18struct host_sb_plat {
19 char *label;
20 char *filename;
21 int fd;
22};
23
24/**
25 * struct host_ops - operations supported by UCLASS_HOST
Simon Glass884c2f82022-10-29 19:47:15 -060026 */
27struct host_ops {
Heinrich Schuchardtb7ad04a2022-11-14 10:16:02 +010028 /**
29 * @attach_file: - Attach a new file to the device
Simon Glass884c2f82022-10-29 19:47:15 -060030 *
Heinrich Schuchardtb7ad04a2022-11-14 10:16:02 +010031 * @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
Simon Glass884c2f82022-10-29 19:47:15 -060034 * other error
35 */
36 int (*attach_file)(struct udevice *dev, const char *filename);
37
38 /**
Heinrich Schuchardtb7ad04a2022-11-14 10:16:02 +010039 * @detach_file: - Detach a file from the device
Simon Glass884c2f82022-10-29 19:47:15 -060040 *
Heinrich Schuchardtb7ad04a2022-11-14 10:16:02 +010041 * @detach_file.dev: Device to detach from
42 * @detach_file.Returns: 0 if OK, -ENOENT if no file is attached, other -ve on other
Simon Glass884c2f82022-10-29 19:47:15 -060043 * 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 */
58int 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 */
67int 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
Bin Meng881e4752023-09-26 16:43:33 +080077 * @blksz: logical block size of the device
Simon Glass884c2f82022-10-29 19:47:15 -060078 * @devp: Returns the device created, on success
79 * Returns: 0 if OK, -ve on error
80 */
Bin Meng881e4752023-09-26 16:43:33 +080081int host_create_device(const char *label, bool removable, unsigned long blksz,
Simon Glass884c2f82022-10-29 19:47:15 -060082 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
Bin Meng881e4752023-09-26 16:43:33 +080091 * @blksz: logical block size of the device
Simon Glass884c2f82022-10-29 19:47:15 -060092 * @devp: Returns the device created, on success
93 * Returns: 0 if OK, -ve on error
94 */
95int host_create_attach_file(const char *label, const char *filename,
Bin Meng881e4752023-09-26 16:43:33 +080096 bool removable, unsigned long blksz,
97 struct udevice **devp);
Simon Glass884c2f82022-10-29 19:47:15 -060098
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 */
107struct 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 */
114struct 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 */
123void host_set_cur_dev(struct udevice *dev);
124
125#endif /* __SANDBOX_HOST__ */