s390/qdio: cleanup chsc SADC usage
Move the code to issue the set adapter device controls command to chsc.c and make it accessible for the qdio code via the wrapper chsc_sadc. Reviewed-by: Ursula Braun <ursula.braun@de.ibm.com> Signed-off-by: Sebastian Ott <sebott@linux.vnet.ibm.com> Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
This commit is contained in:

committed by
Martin Schwidefsky

parent
da5b6cb162
commit
ca4ba153f9
@@ -20,6 +20,7 @@
|
||||
#include <asm/chpid.h>
|
||||
#include <asm/chsc.h>
|
||||
#include <asm/crw.h>
|
||||
#include <asm/isc.h>
|
||||
|
||||
#include "css.h"
|
||||
#include "cio.h"
|
||||
@@ -167,6 +168,42 @@ int chsc_ssqd(struct subchannel_id schid, struct chsc_ssqd_area *ssqd)
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(chsc_ssqd);
|
||||
|
||||
/**
|
||||
* chsc_sadc() - set adapter device controls (SADC)
|
||||
* @schid: id of the subchannel on which SADC is performed
|
||||
* @scssc: request and response block for SADC
|
||||
* @summary_indicator_addr: summary indicator address
|
||||
* @subchannel_indicator_addr: subchannel indicator address
|
||||
*
|
||||
* Returns 0 on success.
|
||||
*/
|
||||
int chsc_sadc(struct subchannel_id schid, struct chsc_scssc_area *scssc,
|
||||
u64 summary_indicator_addr, u64 subchannel_indicator_addr)
|
||||
{
|
||||
memset(scssc, 0, sizeof(*scssc));
|
||||
scssc->request.length = 0x0fe0;
|
||||
scssc->request.code = 0x0021;
|
||||
scssc->operation_code = 0;
|
||||
|
||||
scssc->summary_indicator_addr = summary_indicator_addr;
|
||||
scssc->subchannel_indicator_addr = subchannel_indicator_addr;
|
||||
|
||||
scssc->ks = PAGE_DEFAULT_KEY >> 4;
|
||||
scssc->kc = PAGE_DEFAULT_KEY >> 4;
|
||||
scssc->isc = QDIO_AIRQ_ISC;
|
||||
scssc->schid = schid;
|
||||
|
||||
/* enable the time delay disablement facility */
|
||||
if (css_general_characteristics.aif_tdd)
|
||||
scssc->word_with_d_bit = 0x10000000;
|
||||
|
||||
if (chsc(scssc))
|
||||
return -EIO;
|
||||
|
||||
return chsc_error_from_response(scssc->response.code);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(chsc_sadc);
|
||||
|
||||
static int s390_subchannel_remove_chpid(struct subchannel *sch, void *data)
|
||||
{
|
||||
spin_lock_irq(sch->lock);
|
||||
|
Reference in New Issue
Block a user