s390/sclp: Add support for SCLP AP adapter config/deconfig
Add support for AP bus adapter config and deconfig to the sclp core code. The code is statically build into the kernel when ZCRYPT is configured either as module or with static support. This is the base functionality for having configure/deconfigure support in the AP bus and card code. Another patch will exploit this soon. Signed-off-by: Harald Freudenberger <freude@linux.ibm.com> Suggested-by: Pierre Morel <pmorel@linux.ibm.com> Signed-off-by: Vasily Gorbik <gor@linux.ibm.com>
This commit is contained in:
parent
4f2fcccdb5
commit
0671cc1048
|
@ -128,6 +128,8 @@ int sclp_chp_deconfigure(struct chp_id chpid);
|
|||
int sclp_chp_read_info(struct sclp_chp_info *info);
|
||||
int sclp_pci_configure(u32 fid);
|
||||
int sclp_pci_deconfigure(u32 fid);
|
||||
int sclp_ap_configure(u32 apid);
|
||||
int sclp_ap_deconfigure(u32 apid);
|
||||
int sclp_pci_report(struct zpci_report_error_header *report, u32 fh, u32 fid);
|
||||
int memcpy_hsa_kernel(void *dest, unsigned long src, size_t count);
|
||||
int memcpy_hsa_user(void __user *dest, unsigned long src, size_t count);
|
||||
|
|
|
@ -34,6 +34,8 @@ obj-$(CONFIG_SCLP_VT220_TTY) += sclp_vt220.o
|
|||
|
||||
obj-$(CONFIG_PCI) += sclp_pci.o
|
||||
|
||||
obj-$(subst m,y,$(CONFIG_ZCRYPT)) += sclp_ap.o
|
||||
|
||||
obj-$(CONFIG_VMLOGRDR) += vmlogrdr.o
|
||||
obj-$(CONFIG_VMCP) += vmcp.o
|
||||
|
||||
|
|
|
@ -229,7 +229,7 @@ static inline void sclp_fill_core_info(struct sclp_core_info *info,
|
|||
#define SCLP_HAS_CPU_INFO (sclp.facilities & 0x0800000000000000ULL)
|
||||
#define SCLP_HAS_CPU_RECONFIG (sclp.facilities & 0x0400000000000000ULL)
|
||||
#define SCLP_HAS_PCI_RECONFIG (sclp.facilities & 0x0000000040000000ULL)
|
||||
|
||||
#define SCLP_HAS_AP_RECONFIG (sclp.facilities & 0x0000000100000000ULL)
|
||||
|
||||
struct gds_subvector {
|
||||
u8 length;
|
||||
|
|
|
@ -0,0 +1,63 @@
|
|||
// SPDX-License-Identifier: GPL-2.0
|
||||
/*
|
||||
* s390 crypto adapter related sclp functions.
|
||||
*
|
||||
* Copyright IBM Corp. 2020
|
||||
*/
|
||||
#define KMSG_COMPONENT "sclp_cmd"
|
||||
#define pr_fmt(fmt) KMSG_COMPONENT ": " fmt
|
||||
|
||||
#include <linux/export.h>
|
||||
#include <linux/slab.h>
|
||||
#include <asm/sclp.h>
|
||||
#include "sclp.h"
|
||||
|
||||
#define SCLP_CMDW_CONFIGURE_AP 0x001f0001
|
||||
#define SCLP_CMDW_DECONFIGURE_AP 0x001e0001
|
||||
|
||||
struct ap_cfg_sccb {
|
||||
struct sccb_header header;
|
||||
} __packed;
|
||||
|
||||
static int do_ap_configure(sclp_cmdw_t cmd, u32 apid)
|
||||
{
|
||||
struct ap_cfg_sccb *sccb;
|
||||
int rc;
|
||||
|
||||
if (!SCLP_HAS_AP_RECONFIG)
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
sccb = (struct ap_cfg_sccb *) get_zeroed_page(GFP_KERNEL | GFP_DMA);
|
||||
if (!sccb)
|
||||
return -ENOMEM;
|
||||
|
||||
sccb->header.length = PAGE_SIZE;
|
||||
cmd |= (apid & 0xFF) << 8;
|
||||
rc = sclp_sync_request(cmd, sccb);
|
||||
if (rc)
|
||||
goto out;
|
||||
switch (sccb->header.response_code) {
|
||||
case 0x0020: case 0x0120: case 0x0440: case 0x0450:
|
||||
break;
|
||||
default:
|
||||
pr_warn("configure AP adapter %u failed: cmd=0x%08x response=0x%04x\n",
|
||||
apid, cmd, sccb->header.response_code);
|
||||
rc = -EIO;
|
||||
break;
|
||||
}
|
||||
out:
|
||||
free_page((unsigned long) sccb);
|
||||
return rc;
|
||||
}
|
||||
|
||||
int sclp_ap_configure(u32 apid)
|
||||
{
|
||||
return do_ap_configure(SCLP_CMDW_CONFIGURE_AP, apid);
|
||||
}
|
||||
EXPORT_SYMBOL(sclp_ap_configure);
|
||||
|
||||
int sclp_ap_deconfigure(u32 apid)
|
||||
{
|
||||
return do_ap_configure(SCLP_CMDW_DECONFIGURE_AP, apid);
|
||||
}
|
||||
EXPORT_SYMBOL(sclp_ap_deconfigure);
|
Loading…
Reference in New Issue