aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHelge Deller <deller@gmx.de>2021-02-10 21:07:01 +0100
committerHelge Deller <deller@gmx.de>2021-09-24 11:10:17 +0200
commitb305fd659ebf2c11b94957904fadfab73fc3933e (patch)
tree3a4d58b3a0491bdafdc2b3fe53eb0c718f98fff1
parent3705df1c13ce3069fd2740ef74acfcb56f046cbd (diff)
downloadseabios-hppa-b305fd659ebf2c11b94957904fadfab73fc3933e.zip
seabios-hppa-b305fd659ebf2c11b94957904fadfab73fc3933e.tar.gz
seabios-hppa-b305fd659ebf2c11b94957904fadfab73fc3933e.tar.bz2
scsi: Add fields for specifying target and lun of SCSI devices
On PA-RISC it's possible to boot from various SCSI targets and LUNs. Add fields to the drive_s struct to be able to store those. Signed-off-by: Helge Deller <deller@gmx.de>
-rw-r--r--src/block.h2
-rw-r--r--src/hw/blockcmd.c4
-rw-r--r--src/hw/blockcmd.h2
-rw-r--r--src/hw/esp-scsi.c2
-rw-r--r--src/hw/lsi-scsi.c2
-rw-r--r--src/hw/megasas.c2
-rw-r--r--src/hw/mpt-scsi.c2
-rw-r--r--src/hw/pvscsi.c2
-rw-r--r--src/hw/usb-msc.c2
-rw-r--r--src/hw/usb-uas.c2
-rw-r--r--src/hw/virtio-scsi.c2
11 files changed, 14 insertions, 10 deletions
diff --git a/src/block.h b/src/block.h
index c1b8d73..5cd2e5d 100644
--- a/src/block.h
+++ b/src/block.h
@@ -57,6 +57,8 @@ struct drive_s {
u8 translation; // type of translation
u16 blksize; // block size
struct chs_s pchs; // Physical CHS
+
+ u8 target, lun; // SCSI target and LUN
};
#define DISK_SECTOR_SIZE 512
diff --git a/src/hw/blockcmd.c b/src/hw/blockcmd.c
index 1b447ac..89f16a8 100644
--- a/src/hw/blockcmd.c
+++ b/src/hw/blockcmd.c
@@ -286,9 +286,11 @@ int scsi_sequential_scan(struct drive_s *tmp_drive, u32 maxluns,
// Validate drive, find block size / sector count, and register drive.
int
-scsi_drive_setup(struct drive_s *drive, const char *s, int prio)
+scsi_drive_setup(struct drive_s *drive, const char *s, int prio, u8 target, u8 lun)
{
ASSERT32FLAT();
+ drive->target = target;
+ drive->lun = lun;
struct disk_op_s dop;
memset(&dop, 0, sizeof(dop));
dop.drive_fl = drive;
diff --git a/src/hw/blockcmd.h b/src/hw/blockcmd.h
index f18543e..42e1873 100644
--- a/src/hw/blockcmd.h
+++ b/src/hw/blockcmd.h
@@ -105,7 +105,7 @@ int scsi_fill_cmd(struct disk_op_s *op, void *cdbcmd, int maxcdb);
int scsi_is_read(struct disk_op_s *op);
int scsi_is_ready(struct disk_op_s *op);
struct drive_s;
-int scsi_drive_setup(struct drive_s *drive, const char *s, int prio);
+int scsi_drive_setup(struct drive_s *drive, const char *s, int prio, u8 target, u8 lun);
typedef int (*scsi_add_lun)(u32 lun, struct drive_s *tmpl_drv);
int scsi_rep_luns_scan(struct drive_s *tmp_drive, scsi_add_lun add_lun);
int scsi_sequential_scan(struct drive_s *tmp_drive, u32 maxluns,
diff --git a/src/hw/esp-scsi.c b/src/hw/esp-scsi.c
index cc25f22..3282437 100644
--- a/src/hw/esp-scsi.c
+++ b/src/hw/esp-scsi.c
@@ -184,7 +184,7 @@ esp_scsi_add_lun(u32 lun, struct drive_s *tmpl_drv)
boot_lchs_find_scsi_device(llun->pci, llun->target, llun->lun,
&(llun->drive.lchs));
int prio = bootprio_find_scsi_device(llun->pci, llun->target, llun->lun);
- int ret = scsi_drive_setup(&llun->drive, name, prio);
+ int ret = scsi_drive_setup(&llun->drive, name, prio, llun->target, llun->lun);
free(name);
if (ret)
goto fail;
diff --git a/src/hw/lsi-scsi.c b/src/hw/lsi-scsi.c
index cbaa2ac..101544e 100644
--- a/src/hw/lsi-scsi.c
+++ b/src/hw/lsi-scsi.c
@@ -163,7 +163,7 @@ lsi_scsi_add_lun(u32 lun, struct drive_s *tmpl_drv)
char *name = znprintf(MAXDESCSIZE, "lsi %pP %d:%d",
llun->pci, llun->target, llun->lun);
int prio = bootprio_find_scsi_device(llun->pci, llun->target, llun->lun);
- int ret = scsi_drive_setup(&llun->drive, name, prio);
+ int ret = scsi_drive_setup(&llun->drive, name, prio, llun->target, llun->lun);
free(name);
if (ret)
goto fail;
diff --git a/src/hw/megasas.c b/src/hw/megasas.c
index 87b8bee..94331d6 100644
--- a/src/hw/megasas.c
+++ b/src/hw/megasas.c
@@ -229,7 +229,7 @@ megasas_add_lun(struct pci_device *pci, u32 iobase, u8 target, u8 lun)
name = znprintf(MAXDESCSIZE, "MegaRAID SAS (PCI %pP) LD %d:%d"
, pci, target, lun);
prio = bootprio_find_scsi_device(pci, target, lun);
- ret = scsi_drive_setup(&mlun->drive, name, prio);
+ ret = scsi_drive_setup(&mlun->drive, name, prio, target, lun);
free(name);
if (ret) {
free(mlun->frame);
diff --git a/src/hw/mpt-scsi.c b/src/hw/mpt-scsi.c
index 570b212..7dd4946 100644
--- a/src/hw/mpt-scsi.c
+++ b/src/hw/mpt-scsi.c
@@ -226,7 +226,7 @@ mpt_scsi_add_lun(u32 lun, struct drive_s *tmpl_drv)
char *name = znprintf(MAXDESCSIZE, "mpt %pP %d:%d",
llun->pci, llun->target, llun->lun);
int prio = bootprio_find_scsi_device(llun->pci, llun->target, llun->lun);
- int ret = scsi_drive_setup(&llun->drive, name, prio);
+ int ret = scsi_drive_setup(&llun->drive, name, prio, llun->target, llun->lun);
free(name);
if (ret) {
goto fail;
diff --git a/src/hw/pvscsi.c b/src/hw/pvscsi.c
index 3e5171a..f2e6fa9 100644
--- a/src/hw/pvscsi.c
+++ b/src/hw/pvscsi.c
@@ -276,7 +276,7 @@ pvscsi_add_lun(struct pci_device *pci, void *iobase,
boot_lchs_find_scsi_device(pci, target, lun, &(plun->drive.lchs));
char *name = znprintf(MAXDESCSIZE, "pvscsi %pP %d:%d", pci, target, lun);
int prio = bootprio_find_scsi_device(pci, target, lun);
- int ret = scsi_drive_setup(&plun->drive, name, prio);
+ int ret = scsi_drive_setup(&plun->drive, name, prio, target, lun);
free(name);
if (ret)
goto fail;
diff --git a/src/hw/usb-msc.c b/src/hw/usb-msc.c
index 2b18828..444f436 100644
--- a/src/hw/usb-msc.c
+++ b/src/hw/usb-msc.c
@@ -158,7 +158,7 @@ usb_msc_lun_setup(struct usb_pipe *inpipe, struct usb_pipe *outpipe,
drive->lun = lun;
int prio = bootprio_find_usb(usbdev, lun);
- int ret = scsi_drive_setup(&drive->drive, "USB MSC", prio);
+ int ret = scsi_drive_setup(&drive->drive, "USB MSC", prio, 0, lun);
if (ret) {
dprintf(1, "Unable to configure USB MSC drive.\n");
free(drive);
diff --git a/src/hw/usb-uas.c b/src/hw/usb-uas.c
index 6a8decc..4a789b3 100644
--- a/src/hw/usb-uas.c
+++ b/src/hw/usb-uas.c
@@ -204,7 +204,7 @@ uas_add_lun(u32 lun, struct drive_s *tmpl_drv)
lun);
int prio = bootprio_find_usb(drive->usbdev, drive->lun);
- int ret = scsi_drive_setup(&drive->drive, "USB UAS", prio);
+ int ret = scsi_drive_setup(&drive->drive, "USB UAS", prio, 0, lun);
if (ret) {
free(drive);
return -1;
diff --git a/src/hw/virtio-scsi.c b/src/hw/virtio-scsi.c
index 369c981..81bce22 100644
--- a/src/hw/virtio-scsi.c
+++ b/src/hw/virtio-scsi.c
@@ -148,7 +148,7 @@ virtio_scsi_add_lun(u32 lun, struct drive_s *tmpl_drv)
if (vlun->pci)
boot_lchs_find_scsi_device(vlun->pci, vlun->target, vlun->lun,
&(vlun->drive.lchs));
- int ret = scsi_drive_setup(&vlun->drive, "virtio-scsi", prio);
+ int ret = scsi_drive_setup(&vlun->drive, "virtio-scsi", prio, vlun->target, vlun->lun);
if (ret)
goto fail;
return 0;