Implement storage device partition rescan (XDRV_PARTITION_RESCAN), Self-hosted installation WIP
All checks were successful
Build ISO image / build-and-deploy (push) Successful in 35s
Build documentation / build-and-deploy (push) Successful in 27s

This commit is contained in:
2026-04-16 00:09:46 +02:00
parent 16cb7fd7bd
commit 288a4b4e83
27 changed files with 1565 additions and 147 deletions

View File

@@ -1,5 +1,6 @@
#include <device/def_device_op.h>
#include <device/device.h>
#include <device/storage/partitions.h>
#include <device/storage/usbdrv.h>
#include <device/usb/xhci.h>
#include <devices.h>
@@ -101,8 +102,8 @@ static int usb_ms_scsi_read_capacity (struct xhci* xhci, struct xhci_usb_device*
goto done;
}
uint32_t last_lba = BE2LE32 (*(uint32_t*)&data[0]);
uint32_t blk_len = BE2LE32 (*(uint32_t*)&data[4]);
uint32_t last_lba = BSWAP32 (*(uint32_t*)&data[0]);
uint32_t blk_len = BSWAP32 (*(uint32_t*)&data[4]);
*sector_size = blk_len;
*sector_count = (size_t)last_lba + 1;
@@ -422,6 +423,29 @@ DEFINE_DEVICE_OP (usbdrv_get_size) {
return ST_OK;
}
DEFINE_DEVICE_OP (usbdrv_partition_rescan) {
uint64_t fsd;
struct list_node_link *subdevice_link, *tmp_subdevice_link;
list_foreach (device->subdevices, subdevice_link, tmp_subdevice_link) {
struct device* subdevice = list_entry (subdevice_link, struct device, subdevices_link);
spin_lock (&subdevice->lock, &fsd);
list_remove (device->subdevices, &subdevice->subdevices_link);
spin_unlock (&subdevice->lock, fsd);
device_delete (subdevice->key, proc, rctx);
}
spin_unlock (&device->lock, *lockflags);
int r = device_probe_partitions (proc, rctx, device);
spin_lock (&device->lock, lockflags);
return r;
}
DEFINE_DEVICE_INIT (usbdrv_init) {
uint64_t fd;
int ret;