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 26 */ 27 struct host_ops { 28 /** 29 * @attach_file: - Attach a new file to the device 30 * 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 34 * other error 35 */ 36 int (*attach_file)(struct udevice *dev, const char *filename); 37 38 /** 39 * @detach_file: - Detach a file from the device 40 * 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 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 77 * @blksz: logical block size of the device 78 * @devp: Returns the device created, on success 79 * Returns: 0 if OK, -ve on error 80 */ 81 int host_create_device(const char *label, bool removable, unsigned long blksz, 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 91 * @blksz: logical block size of the device 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, 96 bool removable, unsigned long blksz, 97 struct udevice **devp); 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__ */ 126