summaryrefslogtreecommitdiffstats
path: root/isys
diff options
context:
space:
mode:
authorbrosenkr <brosenkr>2000-08-04 12:21:53 +0000
committerbrosenkr <brosenkr>2000-08-04 12:21:53 +0000
commit0e7917f3055d20e2487eaffabbefd557f547def9 (patch)
tree863095380b3fa69903eef861219ed618be284d97 /isys
parent9755fe7f4f14f9c0d5b3f5cf488c1c180f4679a7 (diff)
downloadanaconda-0e7917f3055d20e2487eaffabbefd557f547def9.tar.gz
anaconda-0e7917f3055d20e2487eaffabbefd557f547def9.tar.xz
anaconda-0e7917f3055d20e2487eaffabbefd557f547def9.zip
Support new SmartArray controller, required by SAP, patch from Karsten
Diffstat (limited to 'isys')
-rw-r--r--isys/probe.c34
1 files changed, 34 insertions, 0 deletions
diff --git a/isys/probe.c b/isys/probe.c
index 7afe49dfb..c702c2907 100644
--- a/isys/probe.c
+++ b/isys/probe.c
@@ -11,6 +11,7 @@
static int dac960GetDevices(struct knownDevices * devices);
static int CompaqSmartArrayGetDevices(struct knownDevices * devices);
+static int CompaqSmartArray5300GetDevices(struct knownDevices * devices);
static int readFD (int fd, char **buf)
{
@@ -224,6 +225,7 @@ int kdFindScsiList(struct knownDevices * devices, int code) {
if (access("/proc/scsi/scsi", R_OK)) {
dac960GetDevices(devices);
CompaqSmartArrayGetDevices(devices);
+ CompaqSmartArray5300GetDevices(devices);
return 0;
}
@@ -241,6 +243,7 @@ int kdFindScsiList(struct knownDevices * devices, int code) {
if (!strncmp(buf, "Attached devices: none", 22)) {
dac960GetDevices(devices);
CompaqSmartArrayGetDevices(devices);
+ CompaqSmartArray5300GetDevices(devices);
goto bye;
}
@@ -366,6 +369,7 @@ int kdFindScsiList(struct knownDevices * devices, int code) {
dac960GetDevices(devices);
CompaqSmartArrayGetDevices(devices);
+ CompaqSmartArray5300GetDevices(devices);
qsort(devices->known, devices->numKnown, sizeof(*devices->known),
sortDevices);
@@ -460,3 +464,33 @@ static int CompaqSmartArrayGetDevices(struct knownDevices * devices) {
return 0;
}
+
+static int CompaqSmartArray5300GetDevices(struct knownDevices * devices) {
+ struct kddevice newDevice;
+ FILE *f;
+ char buf[256];
+ char *ptr;
+ int numMatches = 0, ctlNum = 0;
+ char ctl[40];
+
+ sprintf(ctl, "/proc/cciss/cciss%d", ctlNum++);
+
+ while ((f = fopen(ctl, "r"))){
+ while (fgets(buf, sizeof(buf) - 1, f)) {
+ if (!strncmp(buf, "cciss/", 6)) {
+ ptr = strchr(buf, ':');
+ *ptr = '\0';
+
+ if (!deviceKnown(devices, buf)) {
+ newDevice.name = strdup(buf);
+ newDevice.model = strdup("Compaq RAID logical disk");
+ newDevice.class = CLASS_HD;
+ addDevice(devices, newDevice);
+ }
+ }
+ }
+ sprintf(ctl, "/proc/cciss/cciss%d", ctlNum++);
+ }
+
+ return 0;
+}