mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-08-26 10:49:33 +00:00
s390/ipl: make ipl_info less confusing
The ipl_info union in struct ipl_parameter_block has the same name as the struct ipl_info. This does not help while reading the code and the union in struct ipl_parameter_block does not need to be named. Drop the name from the union. Reviewed-by: Hendrik Brueckner <brueckner@linux.ibm.com> Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
This commit is contained in:
parent
a8fd61688d
commit
86c74d869d
4 changed files with 66 additions and 68 deletions
|
@ -71,26 +71,26 @@ static size_t ipl_block_get_ascii_scpdata(char *dest, size_t size,
|
||||||
size_t i;
|
size_t i;
|
||||||
int has_lowercase;
|
int has_lowercase;
|
||||||
|
|
||||||
count = min(size - 1, scpdata_length(ipb->ipl_info.fcp.scp_data,
|
count = min(size - 1, scpdata_length(ipb->fcp.scp_data,
|
||||||
ipb->ipl_info.fcp.scp_data_len));
|
ipb->fcp.scp_data_len));
|
||||||
if (!count)
|
if (!count)
|
||||||
goto out;
|
goto out;
|
||||||
|
|
||||||
has_lowercase = 0;
|
has_lowercase = 0;
|
||||||
for (i = 0; i < count; i++) {
|
for (i = 0; i < count; i++) {
|
||||||
if (!isascii(ipb->ipl_info.fcp.scp_data[i])) {
|
if (!isascii(ipb->fcp.scp_data[i])) {
|
||||||
count = 0;
|
count = 0;
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
if (!has_lowercase && islower(ipb->ipl_info.fcp.scp_data[i]))
|
if (!has_lowercase && islower(ipb->fcp.scp_data[i]))
|
||||||
has_lowercase = 1;
|
has_lowercase = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (has_lowercase)
|
if (has_lowercase)
|
||||||
memcpy(dest, ipb->ipl_info.fcp.scp_data, count);
|
memcpy(dest, ipb->fcp.scp_data, count);
|
||||||
else
|
else
|
||||||
for (i = 0; i < count; i++)
|
for (i = 0; i < count; i++)
|
||||||
dest[i] = tolower(ipb->ipl_info.fcp.scp_data[i]);
|
dest[i] = tolower(ipb->fcp.scp_data[i]);
|
||||||
out:
|
out:
|
||||||
dest[count] = '\0';
|
dest[count] = '\0';
|
||||||
return count;
|
return count;
|
||||||
|
@ -239,7 +239,7 @@ void setup_memory_end(void)
|
||||||
#ifdef CONFIG_CRASH_DUMP
|
#ifdef CONFIG_CRASH_DUMP
|
||||||
if (!OLDMEM_BASE && ipl_block_valid &&
|
if (!OLDMEM_BASE && ipl_block_valid &&
|
||||||
ipl_block.hdr.pbt == DIAG308_IPL_TYPE_FCP &&
|
ipl_block.hdr.pbt == DIAG308_IPL_TYPE_FCP &&
|
||||||
ipl_block.ipl_info.fcp.opt == DIAG308_IPL_OPT_DUMP) {
|
ipl_block.fcp.opt == DIAG308_IPL_OPT_DUMP) {
|
||||||
if (!sclp_early_get_hsa_size(&memory_end) && memory_end)
|
if (!sclp_early_get_hsa_size(&memory_end) && memory_end)
|
||||||
memory_end_set = 1;
|
memory_end_set = 1;
|
||||||
}
|
}
|
||||||
|
|
|
@ -78,7 +78,7 @@ struct ipl_parameter_block {
|
||||||
struct ipl_block_fcp fcp;
|
struct ipl_block_fcp fcp;
|
||||||
struct ipl_block_ccw ccw;
|
struct ipl_block_ccw ccw;
|
||||||
char raw[PAGE_SIZE - sizeof(struct ipl_list_hdr)];
|
char raw[PAGE_SIZE - sizeof(struct ipl_list_hdr)];
|
||||||
} ipl_info;
|
};
|
||||||
} __packed __aligned(PAGE_SIZE);
|
} __packed __aligned(PAGE_SIZE);
|
||||||
|
|
||||||
struct save_area;
|
struct save_area;
|
||||||
|
|
|
@ -248,7 +248,7 @@ static __init enum ipl_type get_ipl_type(void)
|
||||||
case DIAG308_IPL_TYPE_CCW:
|
case DIAG308_IPL_TYPE_CCW:
|
||||||
return IPL_TYPE_CCW;
|
return IPL_TYPE_CCW;
|
||||||
case DIAG308_IPL_TYPE_FCP:
|
case DIAG308_IPL_TYPE_FCP:
|
||||||
if (ipl_block.ipl_info.fcp.opt == DIAG308_IPL_OPT_DUMP)
|
if (ipl_block.fcp.opt == DIAG308_IPL_OPT_DUMP)
|
||||||
return IPL_TYPE_FCP_DUMP;
|
return IPL_TYPE_FCP_DUMP;
|
||||||
else
|
else
|
||||||
return IPL_TYPE_FCP;
|
return IPL_TYPE_FCP;
|
||||||
|
@ -285,12 +285,11 @@ static ssize_t sys_ipl_device_show(struct kobject *kobj,
|
||||||
{
|
{
|
||||||
switch (ipl_info.type) {
|
switch (ipl_info.type) {
|
||||||
case IPL_TYPE_CCW:
|
case IPL_TYPE_CCW:
|
||||||
return sprintf(page, "0.%x.%04x\n", ipl_block.ipl_info.ccw.ssid,
|
return sprintf(page, "0.%x.%04x\n", ipl_block.ccw.ssid,
|
||||||
ipl_block.ipl_info.ccw.devno);
|
ipl_block.ccw.devno);
|
||||||
case IPL_TYPE_FCP:
|
case IPL_TYPE_FCP:
|
||||||
case IPL_TYPE_FCP_DUMP:
|
case IPL_TYPE_FCP_DUMP:
|
||||||
return sprintf(page, "0.0.%04x\n",
|
return sprintf(page, "0.0.%04x\n", ipl_block.fcp.devno);
|
||||||
ipl_block.ipl_info.fcp.devno);
|
|
||||||
default:
|
default:
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -314,8 +313,8 @@ static ssize_t ipl_scp_data_read(struct file *filp, struct kobject *kobj,
|
||||||
struct bin_attribute *attr, char *buf,
|
struct bin_attribute *attr, char *buf,
|
||||||
loff_t off, size_t count)
|
loff_t off, size_t count)
|
||||||
{
|
{
|
||||||
unsigned int size = ipl_block.ipl_info.fcp.scp_data_len;
|
unsigned int size = ipl_block.fcp.scp_data_len;
|
||||||
void *scp_data = &ipl_block.ipl_info.fcp.scp_data;
|
void *scp_data = &ipl_block.fcp.scp_data;
|
||||||
|
|
||||||
return memory_read_from_buffer(buf, count, &off, scp_data, size);
|
return memory_read_from_buffer(buf, count, &off, scp_data, size);
|
||||||
}
|
}
|
||||||
|
@ -331,13 +330,13 @@ static struct bin_attribute *ipl_fcp_bin_attrs[] = {
|
||||||
/* FCP ipl device attributes */
|
/* FCP ipl device attributes */
|
||||||
|
|
||||||
DEFINE_IPL_ATTR_RO(ipl_fcp, wwpn, "0x%016llx\n",
|
DEFINE_IPL_ATTR_RO(ipl_fcp, wwpn, "0x%016llx\n",
|
||||||
(unsigned long long)ipl_block.ipl_info.fcp.wwpn);
|
(unsigned long long)ipl_block.fcp.wwpn);
|
||||||
DEFINE_IPL_ATTR_RO(ipl_fcp, lun, "0x%016llx\n",
|
DEFINE_IPL_ATTR_RO(ipl_fcp, lun, "0x%016llx\n",
|
||||||
(unsigned long long)ipl_block.ipl_info.fcp.lun);
|
(unsigned long long)ipl_block.fcp.lun);
|
||||||
DEFINE_IPL_ATTR_RO(ipl_fcp, bootprog, "%lld\n",
|
DEFINE_IPL_ATTR_RO(ipl_fcp, bootprog, "%lld\n",
|
||||||
(unsigned long long)ipl_block.ipl_info.fcp.bootprog);
|
(unsigned long long)ipl_block.fcp.bootprog);
|
||||||
DEFINE_IPL_ATTR_RO(ipl_fcp, br_lba, "%lld\n",
|
DEFINE_IPL_ATTR_RO(ipl_fcp, br_lba, "%lld\n",
|
||||||
(unsigned long long)ipl_block.ipl_info.fcp.br_lba);
|
(unsigned long long)ipl_block.fcp.br_lba);
|
||||||
|
|
||||||
static ssize_t ipl_ccw_loadparm_show(struct kobject *kobj,
|
static ssize_t ipl_ccw_loadparm_show(struct kobject *kobj,
|
||||||
struct kobj_attribute *attr, char *page)
|
struct kobj_attribute *attr, char *page)
|
||||||
|
@ -493,14 +492,14 @@ static ssize_t reipl_generic_vmparm_store(struct ipl_parameter_block *ipb,
|
||||||
if (!(isalnum(buf[i]) || isascii(buf[i]) || isprint(buf[i])))
|
if (!(isalnum(buf[i]) || isascii(buf[i]) || isprint(buf[i])))
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
memset(ipb->ipl_info.ccw.vm_parm, 0, DIAG308_VMPARM_SIZE);
|
memset(ipb->ccw.vm_parm, 0, DIAG308_VMPARM_SIZE);
|
||||||
ipb->ipl_info.ccw.vm_parm_len = ip_len;
|
ipb->ccw.vm_parm_len = ip_len;
|
||||||
if (ip_len > 0) {
|
if (ip_len > 0) {
|
||||||
ipb->ipl_info.ccw.vm_flags |= DIAG308_VM_FLAGS_VP_VALID;
|
ipb->ccw.vm_flags |= DIAG308_VM_FLAGS_VP_VALID;
|
||||||
memcpy(ipb->ipl_info.ccw.vm_parm, buf, ip_len);
|
memcpy(ipb->ccw.vm_parm, buf, ip_len);
|
||||||
ASCEBC(ipb->ipl_info.ccw.vm_parm, ip_len);
|
ASCEBC(ipb->ccw.vm_parm, ip_len);
|
||||||
} else {
|
} else {
|
||||||
ipb->ipl_info.ccw.vm_flags &= ~DIAG308_VM_FLAGS_VP_VALID;
|
ipb->ccw.vm_flags &= ~DIAG308_VM_FLAGS_VP_VALID;
|
||||||
}
|
}
|
||||||
|
|
||||||
return len;
|
return len;
|
||||||
|
@ -547,8 +546,8 @@ static ssize_t reipl_fcp_scpdata_read(struct file *filp, struct kobject *kobj,
|
||||||
struct bin_attribute *attr,
|
struct bin_attribute *attr,
|
||||||
char *buf, loff_t off, size_t count)
|
char *buf, loff_t off, size_t count)
|
||||||
{
|
{
|
||||||
size_t size = reipl_block_fcp->ipl_info.fcp.scp_data_len;
|
size_t size = reipl_block_fcp->fcp.scp_data_len;
|
||||||
void *scp_data = reipl_block_fcp->ipl_info.fcp.scp_data;
|
void *scp_data = reipl_block_fcp->fcp.scp_data;
|
||||||
|
|
||||||
return memory_read_from_buffer(buf, count, &off, scp_data, size);
|
return memory_read_from_buffer(buf, count, &off, scp_data, size);
|
||||||
}
|
}
|
||||||
|
@ -564,15 +563,15 @@ static ssize_t reipl_fcp_scpdata_write(struct file *filp, struct kobject *kobj,
|
||||||
if (off)
|
if (off)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
memcpy(reipl_block_fcp->ipl_info.fcp.scp_data, buf, count);
|
memcpy(reipl_block_fcp->fcp.scp_data, buf, count);
|
||||||
if (scpdata_len % 8) {
|
if (scpdata_len % 8) {
|
||||||
padding = 8 - (scpdata_len % 8);
|
padding = 8 - (scpdata_len % 8);
|
||||||
memset(reipl_block_fcp->ipl_info.fcp.scp_data + scpdata_len,
|
memset(reipl_block_fcp->fcp.scp_data + scpdata_len,
|
||||||
0, padding);
|
0, padding);
|
||||||
scpdata_len += padding;
|
scpdata_len += padding;
|
||||||
}
|
}
|
||||||
|
|
||||||
reipl_block_fcp->ipl_info.fcp.scp_data_len = scpdata_len;
|
reipl_block_fcp->fcp.scp_data_len = scpdata_len;
|
||||||
reipl_block_fcp->hdr.len = IPL_PARM_BLK_FCP_LEN + scpdata_len;
|
reipl_block_fcp->hdr.len = IPL_PARM_BLK_FCP_LEN + scpdata_len;
|
||||||
reipl_block_fcp->hdr.blk0_len = IPL_PARM_BLK0_FCP_LEN + scpdata_len;
|
reipl_block_fcp->hdr.blk0_len = IPL_PARM_BLK0_FCP_LEN + scpdata_len;
|
||||||
|
|
||||||
|
@ -588,15 +587,15 @@ static struct bin_attribute *reipl_fcp_bin_attrs[] = {
|
||||||
};
|
};
|
||||||
|
|
||||||
DEFINE_IPL_ATTR_RW(reipl_fcp, wwpn, "0x%016llx\n", "%llx\n",
|
DEFINE_IPL_ATTR_RW(reipl_fcp, wwpn, "0x%016llx\n", "%llx\n",
|
||||||
reipl_block_fcp->ipl_info.fcp.wwpn);
|
reipl_block_fcp->fcp.wwpn);
|
||||||
DEFINE_IPL_ATTR_RW(reipl_fcp, lun, "0x%016llx\n", "%llx\n",
|
DEFINE_IPL_ATTR_RW(reipl_fcp, lun, "0x%016llx\n", "%llx\n",
|
||||||
reipl_block_fcp->ipl_info.fcp.lun);
|
reipl_block_fcp->fcp.lun);
|
||||||
DEFINE_IPL_ATTR_RW(reipl_fcp, bootprog, "%lld\n", "%lld\n",
|
DEFINE_IPL_ATTR_RW(reipl_fcp, bootprog, "%lld\n", "%lld\n",
|
||||||
reipl_block_fcp->ipl_info.fcp.bootprog);
|
reipl_block_fcp->fcp.bootprog);
|
||||||
DEFINE_IPL_ATTR_RW(reipl_fcp, br_lba, "%lld\n", "%lld\n",
|
DEFINE_IPL_ATTR_RW(reipl_fcp, br_lba, "%lld\n", "%lld\n",
|
||||||
reipl_block_fcp->ipl_info.fcp.br_lba);
|
reipl_block_fcp->fcp.br_lba);
|
||||||
DEFINE_IPL_ATTR_RW(reipl_fcp, device, "0.0.%04llx\n", "0.0.%llx\n",
|
DEFINE_IPL_ATTR_RW(reipl_fcp, device, "0.0.%04llx\n", "0.0.%llx\n",
|
||||||
reipl_block_fcp->ipl_info.fcp.devno);
|
reipl_block_fcp->fcp.devno);
|
||||||
|
|
||||||
static void reipl_get_ascii_loadparm(char *loadparm,
|
static void reipl_get_ascii_loadparm(char *loadparm,
|
||||||
struct ipl_parameter_block *ibp)
|
struct ipl_parameter_block *ibp)
|
||||||
|
@ -678,7 +677,7 @@ static struct attribute_group reipl_fcp_attr_group = {
|
||||||
};
|
};
|
||||||
|
|
||||||
/* CCW reipl device attributes */
|
/* CCW reipl device attributes */
|
||||||
DEFINE_IPL_CCW_ATTR_RW(reipl_ccw, device, reipl_block_ccw->ipl_info.ccw);
|
DEFINE_IPL_CCW_ATTR_RW(reipl_ccw, device, reipl_block_ccw->ccw);
|
||||||
|
|
||||||
/* NSS wrapper */
|
/* NSS wrapper */
|
||||||
static ssize_t reipl_nss_loadparm_show(struct kobject *kobj,
|
static ssize_t reipl_nss_loadparm_show(struct kobject *kobj,
|
||||||
|
@ -740,7 +739,7 @@ static struct attribute_group reipl_ccw_attr_group_lpar = {
|
||||||
static void reipl_get_ascii_nss_name(char *dst,
|
static void reipl_get_ascii_nss_name(char *dst,
|
||||||
struct ipl_parameter_block *ipb)
|
struct ipl_parameter_block *ipb)
|
||||||
{
|
{
|
||||||
memcpy(dst, ipb->ipl_info.ccw.nss_name, NSS_NAME_SIZE);
|
memcpy(dst, ipb->ccw.nss_name, NSS_NAME_SIZE);
|
||||||
EBCASC(dst, NSS_NAME_SIZE);
|
EBCASC(dst, NSS_NAME_SIZE);
|
||||||
dst[NSS_NAME_SIZE] = 0;
|
dst[NSS_NAME_SIZE] = 0;
|
||||||
}
|
}
|
||||||
|
@ -768,15 +767,15 @@ static ssize_t reipl_nss_name_store(struct kobject *kobj,
|
||||||
if (nss_len > NSS_NAME_SIZE)
|
if (nss_len > NSS_NAME_SIZE)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
memset(reipl_block_nss->ipl_info.ccw.nss_name, 0x40, NSS_NAME_SIZE);
|
memset(reipl_block_nss->ccw.nss_name, 0x40, NSS_NAME_SIZE);
|
||||||
if (nss_len > 0) {
|
if (nss_len > 0) {
|
||||||
reipl_block_nss->ipl_info.ccw.vm_flags |=
|
reipl_block_nss->ccw.vm_flags |=
|
||||||
DIAG308_VM_FLAGS_NSS_VALID;
|
DIAG308_VM_FLAGS_NSS_VALID;
|
||||||
memcpy(reipl_block_nss->ipl_info.ccw.nss_name, buf, nss_len);
|
memcpy(reipl_block_nss->ccw.nss_name, buf, nss_len);
|
||||||
ASCEBC(reipl_block_nss->ipl_info.ccw.nss_name, nss_len);
|
ASCEBC(reipl_block_nss->ccw.nss_name, nss_len);
|
||||||
EBC_TOUPPER(reipl_block_nss->ipl_info.ccw.nss_name, nss_len);
|
EBC_TOUPPER(reipl_block_nss->ccw.nss_name, nss_len);
|
||||||
} else {
|
} else {
|
||||||
reipl_block_nss->ipl_info.ccw.vm_flags &=
|
reipl_block_nss->ccw.vm_flags &=
|
||||||
~DIAG308_VM_FLAGS_NSS_VALID;
|
~DIAG308_VM_FLAGS_NSS_VALID;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -916,13 +915,12 @@ static void reipl_block_ccw_fill_parms(struct ipl_parameter_block *ipb)
|
||||||
|
|
||||||
/* VM PARM */
|
/* VM PARM */
|
||||||
if (MACHINE_IS_VM && ipl_block_valid &&
|
if (MACHINE_IS_VM && ipl_block_valid &&
|
||||||
(ipl_block.ipl_info.ccw.vm_flags & DIAG308_VM_FLAGS_VP_VALID)) {
|
(ipl_block.ccw.vm_flags & DIAG308_VM_FLAGS_VP_VALID)) {
|
||||||
|
|
||||||
ipb->ipl_info.ccw.vm_flags |= DIAG308_VM_FLAGS_VP_VALID;
|
ipb->ccw.vm_flags |= DIAG308_VM_FLAGS_VP_VALID;
|
||||||
ipb->ipl_info.ccw.vm_parm_len =
|
ipb->ccw.vm_parm_len = ipl_block.ccw.vm_parm_len;
|
||||||
ipl_block.ipl_info.ccw.vm_parm_len;
|
memcpy(ipb->ccw.vm_parm,
|
||||||
memcpy(ipb->ipl_info.ccw.vm_parm,
|
ipl_block.ccw.vm_parm, DIAG308_VMPARM_SIZE);
|
||||||
ipl_block.ipl_info.ccw.vm_parm, DIAG308_VMPARM_SIZE);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -962,8 +960,8 @@ static int __init reipl_ccw_init(void)
|
||||||
|
|
||||||
reipl_block_ccw_init(reipl_block_ccw);
|
reipl_block_ccw_init(reipl_block_ccw);
|
||||||
if (ipl_info.type == IPL_TYPE_CCW) {
|
if (ipl_info.type == IPL_TYPE_CCW) {
|
||||||
reipl_block_ccw->ipl_info.ccw.ssid = ipl_block.ipl_info.ccw.ssid;
|
reipl_block_ccw->ccw.ssid = ipl_block.ccw.ssid;
|
||||||
reipl_block_ccw->ipl_info.ccw.devno = ipl_block.ipl_info.ccw.devno;
|
reipl_block_ccw->ccw.devno = ipl_block.ccw.devno;
|
||||||
reipl_block_ccw_fill_parms(reipl_block_ccw);
|
reipl_block_ccw_fill_parms(reipl_block_ccw);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1008,7 +1006,7 @@ static int __init reipl_fcp_init(void)
|
||||||
reipl_block_fcp->hdr.version = IPL_PARM_BLOCK_VERSION;
|
reipl_block_fcp->hdr.version = IPL_PARM_BLOCK_VERSION;
|
||||||
reipl_block_fcp->hdr.blk0_len = IPL_PARM_BLK0_FCP_LEN;
|
reipl_block_fcp->hdr.blk0_len = IPL_PARM_BLK0_FCP_LEN;
|
||||||
reipl_block_fcp->hdr.pbt = DIAG308_IPL_TYPE_FCP;
|
reipl_block_fcp->hdr.pbt = DIAG308_IPL_TYPE_FCP;
|
||||||
reipl_block_fcp->ipl_info.fcp.opt = DIAG308_IPL_OPT_IPL;
|
reipl_block_fcp->fcp.opt = DIAG308_IPL_OPT_IPL;
|
||||||
}
|
}
|
||||||
reipl_capabilities |= IPL_TYPE_FCP;
|
reipl_capabilities |= IPL_TYPE_FCP;
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -1074,15 +1072,15 @@ static struct shutdown_action __refdata reipl_action = {
|
||||||
/* FCP dump device attributes */
|
/* FCP dump device attributes */
|
||||||
|
|
||||||
DEFINE_IPL_ATTR_RW(dump_fcp, wwpn, "0x%016llx\n", "%llx\n",
|
DEFINE_IPL_ATTR_RW(dump_fcp, wwpn, "0x%016llx\n", "%llx\n",
|
||||||
dump_block_fcp->ipl_info.fcp.wwpn);
|
dump_block_fcp->fcp.wwpn);
|
||||||
DEFINE_IPL_ATTR_RW(dump_fcp, lun, "0x%016llx\n", "%llx\n",
|
DEFINE_IPL_ATTR_RW(dump_fcp, lun, "0x%016llx\n", "%llx\n",
|
||||||
dump_block_fcp->ipl_info.fcp.lun);
|
dump_block_fcp->fcp.lun);
|
||||||
DEFINE_IPL_ATTR_RW(dump_fcp, bootprog, "%lld\n", "%lld\n",
|
DEFINE_IPL_ATTR_RW(dump_fcp, bootprog, "%lld\n", "%lld\n",
|
||||||
dump_block_fcp->ipl_info.fcp.bootprog);
|
dump_block_fcp->fcp.bootprog);
|
||||||
DEFINE_IPL_ATTR_RW(dump_fcp, br_lba, "%lld\n", "%lld\n",
|
DEFINE_IPL_ATTR_RW(dump_fcp, br_lba, "%lld\n", "%lld\n",
|
||||||
dump_block_fcp->ipl_info.fcp.br_lba);
|
dump_block_fcp->fcp.br_lba);
|
||||||
DEFINE_IPL_ATTR_RW(dump_fcp, device, "0.0.%04llx\n", "0.0.%llx\n",
|
DEFINE_IPL_ATTR_RW(dump_fcp, device, "0.0.%04llx\n", "0.0.%llx\n",
|
||||||
dump_block_fcp->ipl_info.fcp.devno);
|
dump_block_fcp->fcp.devno);
|
||||||
|
|
||||||
static struct attribute *dump_fcp_attrs[] = {
|
static struct attribute *dump_fcp_attrs[] = {
|
||||||
&sys_dump_fcp_device_attr.attr,
|
&sys_dump_fcp_device_attr.attr,
|
||||||
|
@ -1099,7 +1097,7 @@ static struct attribute_group dump_fcp_attr_group = {
|
||||||
};
|
};
|
||||||
|
|
||||||
/* CCW dump device attributes */
|
/* CCW dump device attributes */
|
||||||
DEFINE_IPL_CCW_ATTR_RW(dump_ccw, device, dump_block_ccw->ipl_info.ccw);
|
DEFINE_IPL_CCW_ATTR_RW(dump_ccw, device, dump_block_ccw->ccw);
|
||||||
|
|
||||||
static struct attribute *dump_ccw_attrs[] = {
|
static struct attribute *dump_ccw_attrs[] = {
|
||||||
&sys_dump_ccw_device_attr.attr,
|
&sys_dump_ccw_device_attr.attr,
|
||||||
|
@ -1219,7 +1217,7 @@ static int __init dump_fcp_init(void)
|
||||||
dump_block_fcp->hdr.version = IPL_PARM_BLOCK_VERSION;
|
dump_block_fcp->hdr.version = IPL_PARM_BLOCK_VERSION;
|
||||||
dump_block_fcp->hdr.blk0_len = IPL_PARM_BLK0_FCP_LEN;
|
dump_block_fcp->hdr.blk0_len = IPL_PARM_BLK0_FCP_LEN;
|
||||||
dump_block_fcp->hdr.pbt = DIAG308_IPL_TYPE_FCP;
|
dump_block_fcp->hdr.pbt = DIAG308_IPL_TYPE_FCP;
|
||||||
dump_block_fcp->ipl_info.fcp.opt = DIAG308_IPL_OPT_DUMP;
|
dump_block_fcp->fcp.opt = DIAG308_IPL_OPT_DUMP;
|
||||||
dump_capabilities |= DUMP_TYPE_FCP;
|
dump_capabilities |= DUMP_TYPE_FCP;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -1663,15 +1661,15 @@ void __init setup_ipl(void)
|
||||||
ipl_info.type = get_ipl_type();
|
ipl_info.type = get_ipl_type();
|
||||||
switch (ipl_info.type) {
|
switch (ipl_info.type) {
|
||||||
case IPL_TYPE_CCW:
|
case IPL_TYPE_CCW:
|
||||||
ipl_info.data.ccw.dev_id.ssid = ipl_block.ipl_info.ccw.ssid;
|
ipl_info.data.ccw.dev_id.ssid = ipl_block.ccw.ssid;
|
||||||
ipl_info.data.ccw.dev_id.devno = ipl_block.ipl_info.ccw.devno;
|
ipl_info.data.ccw.dev_id.devno = ipl_block.ccw.devno;
|
||||||
break;
|
break;
|
||||||
case IPL_TYPE_FCP:
|
case IPL_TYPE_FCP:
|
||||||
case IPL_TYPE_FCP_DUMP:
|
case IPL_TYPE_FCP_DUMP:
|
||||||
ipl_info.data.fcp.dev_id.ssid = 0;
|
ipl_info.data.fcp.dev_id.ssid = 0;
|
||||||
ipl_info.data.fcp.dev_id.devno = ipl_block.ipl_info.fcp.devno;
|
ipl_info.data.fcp.dev_id.devno = ipl_block.fcp.devno;
|
||||||
ipl_info.data.fcp.wwpn = ipl_block.ipl_info.fcp.wwpn;
|
ipl_info.data.fcp.wwpn = ipl_block.fcp.wwpn;
|
||||||
ipl_info.data.fcp.lun = ipl_block.ipl_info.fcp.lun;
|
ipl_info.data.fcp.lun = ipl_block.fcp.lun;
|
||||||
break;
|
break;
|
||||||
case IPL_TYPE_NSS:
|
case IPL_TYPE_NSS:
|
||||||
case IPL_TYPE_UNKNOWN:
|
case IPL_TYPE_UNKNOWN:
|
||||||
|
|
|
@ -11,11 +11,11 @@ size_t ipl_block_get_ascii_vmparm(char *dest, size_t size,
|
||||||
char has_lowercase = 0;
|
char has_lowercase = 0;
|
||||||
|
|
||||||
len = 0;
|
len = 0;
|
||||||
if ((ipb->ipl_info.ccw.vm_flags & DIAG308_VM_FLAGS_VP_VALID) &&
|
if ((ipb->ccw.vm_flags & DIAG308_VM_FLAGS_VP_VALID) &&
|
||||||
(ipb->ipl_info.ccw.vm_parm_len > 0)) {
|
(ipb->ccw.vm_parm_len > 0)) {
|
||||||
|
|
||||||
len = min_t(size_t, size - 1, ipb->ipl_info.ccw.vm_parm_len);
|
len = min_t(size_t, size - 1, ipb->ccw.vm_parm_len);
|
||||||
memcpy(dest, ipb->ipl_info.ccw.vm_parm, len);
|
memcpy(dest, ipb->ccw.vm_parm, len);
|
||||||
/* If at least one character is lowercase, we assume mixed
|
/* If at least one character is lowercase, we assume mixed
|
||||||
* case; otherwise we convert everything to lowercase.
|
* case; otherwise we convert everything to lowercase.
|
||||||
*/
|
*/
|
||||||
|
|
Loading…
Reference in a new issue