s390x/pci: separate s390_sclp_configure function

Split s390_sclp_configure() into separate functions for sclp
configuring and deconfiguring in order to make the code more readable.

Signed-off-by: Yi Min Zhao <zyimin@linux.vnet.ibm.com>
Reviewed-by: Pierre Morel <pmorel@linux.vnet.ibm.com>
Signed-off-by: Cornelia Huck <cornelia.huck@de.ibm.com>
This commit is contained in:
Yi Min Zhao 2016-04-28 12:33:53 +08:00 committed by Cornelia Huck
parent bac45d5147
commit 8f5cb69313
3 changed files with 29 additions and 8 deletions

View File

@ -106,22 +106,42 @@ S390PCIBusDevice *s390_pci_find_dev_by_fid(uint32_t fid)
return NULL; return NULL;
} }
void s390_pci_sclp_configure(int configure, SCCB *sccb) void s390_pci_sclp_configure(SCCB *sccb)
{ {
PciCfgSccb *psccb = (PciCfgSccb *)sccb; PciCfgSccb *psccb = (PciCfgSccb *)sccb;
S390PCIBusDevice *pbdev = s390_pci_find_dev_by_fid(be32_to_cpu(psccb->aid)); S390PCIBusDevice *pbdev = s390_pci_find_dev_by_fid(be32_to_cpu(psccb->aid));
uint16_t rc; uint16_t rc;
if (pbdev) { if (pbdev) {
if ((configure == 1 && pbdev->configured == true) || if (pbdev->configured) {
(configure == 0 && pbdev->configured == false)) {
rc = SCLP_RC_NO_ACTION_REQUIRED; rc = SCLP_RC_NO_ACTION_REQUIRED;
} else { } else {
pbdev->configured = !pbdev->configured; pbdev->configured = true;
rc = SCLP_RC_NORMAL_COMPLETION; rc = SCLP_RC_NORMAL_COMPLETION;
} }
} else { } else {
DPRINTF("sclp config %d no dev found\n", configure); DPRINTF("sclp config no dev found\n");
rc = SCLP_RC_ADAPTER_ID_NOT_RECOGNIZED;
}
psccb->header.response_code = cpu_to_be16(rc);
}
void s390_pci_sclp_deconfigure(SCCB *sccb)
{
PciCfgSccb *psccb = (PciCfgSccb *)sccb;
S390PCIBusDevice *pbdev = s390_pci_find_dev_by_fid(be32_to_cpu(psccb->aid));
uint16_t rc;
if (pbdev) {
if (!pbdev->configured) {
rc = SCLP_RC_NO_ACTION_REQUIRED;
} else {
pbdev->configured = false;
rc = SCLP_RC_NORMAL_COMPLETION;
}
} else {
DPRINTF("sclp deconfig no dev found\n");
rc = SCLP_RC_ADAPTER_ID_NOT_RECOGNIZED; rc = SCLP_RC_ADAPTER_ID_NOT_RECOGNIZED;
} }

View File

@ -247,7 +247,8 @@ typedef struct S390pciState {
int chsc_sei_nt2_get_event(void *res); int chsc_sei_nt2_get_event(void *res);
int chsc_sei_nt2_have_event(void); int chsc_sei_nt2_have_event(void);
void s390_pci_sclp_configure(int configure, SCCB *sccb); void s390_pci_sclp_configure(SCCB *sccb);
void s390_pci_sclp_deconfigure(SCCB *sccb);
void s390_pcihost_iommu_configure(S390PCIBusDevice *pbdev, bool enable); void s390_pcihost_iommu_configure(S390PCIBusDevice *pbdev, bool enable);
S390PCIBusDevice *s390_pci_find_dev_by_idx(uint32_t idx); S390PCIBusDevice *s390_pci_find_dev_by_idx(uint32_t idx);
S390PCIBusDevice *s390_pci_find_dev_by_fh(uint32_t fh); S390PCIBusDevice *s390_pci_find_dev_by_fh(uint32_t fh);

View File

@ -357,10 +357,10 @@ static void sclp_execute(SCLPDevice *sclp, SCCB *sccb, uint32_t code)
sclp_c->unassign_storage(sclp, sccb); sclp_c->unassign_storage(sclp, sccb);
break; break;
case SCLP_CMDW_CONFIGURE_PCI: case SCLP_CMDW_CONFIGURE_PCI:
s390_pci_sclp_configure(1, sccb); s390_pci_sclp_configure(sccb);
break; break;
case SCLP_CMDW_DECONFIGURE_PCI: case SCLP_CMDW_DECONFIGURE_PCI:
s390_pci_sclp_configure(0, sccb); s390_pci_sclp_deconfigure(sccb);
break; break;
default: default:
efc->command_handler(ef, sccb, code); efc->command_handler(ef, sccb, code);