[S390] cio: move asms to generic header
The ssch and csch functions are not I/O subchannel specific, thus move them from io_sch.h to ioasm.h Signed-off-by: Sebastian Ott <sebott@linux.vnet.ibm.com> Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
This commit is contained in:
parent
9e6f9f851c
commit
dbda8ce540
|
@ -139,23 +139,6 @@ struct ccw_device_private {
|
||||||
void *cmb_wait; /* deferred cmb enable/disable */
|
void *cmb_wait; /* deferred cmb enable/disable */
|
||||||
};
|
};
|
||||||
|
|
||||||
static inline int ssch(struct subchannel_id schid, union orb *addr)
|
|
||||||
{
|
|
||||||
register struct subchannel_id reg1 asm("1") = schid;
|
|
||||||
int ccode = -EIO;
|
|
||||||
|
|
||||||
asm volatile(
|
|
||||||
" ssch 0(%2)\n"
|
|
||||||
"0: ipm %0\n"
|
|
||||||
" srl %0,28\n"
|
|
||||||
"1:\n"
|
|
||||||
EX_TABLE(0b, 1b)
|
|
||||||
: "+d" (ccode)
|
|
||||||
: "d" (reg1), "a" (addr), "m" (*addr)
|
|
||||||
: "cc", "memory");
|
|
||||||
return ccode;
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline int rsch(struct subchannel_id schid)
|
static inline int rsch(struct subchannel_id schid)
|
||||||
{
|
{
|
||||||
register struct subchannel_id reg1 asm("1") = schid;
|
register struct subchannel_id reg1 asm("1") = schid;
|
||||||
|
@ -171,21 +154,6 @@ static inline int rsch(struct subchannel_id schid)
|
||||||
return ccode;
|
return ccode;
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline int csch(struct subchannel_id schid)
|
|
||||||
{
|
|
||||||
register struct subchannel_id reg1 asm("1") = schid;
|
|
||||||
int ccode;
|
|
||||||
|
|
||||||
asm volatile(
|
|
||||||
" csch\n"
|
|
||||||
" ipm %0\n"
|
|
||||||
" srl %0,28"
|
|
||||||
: "=d" (ccode)
|
|
||||||
: "d" (reg1)
|
|
||||||
: "cc");
|
|
||||||
return ccode;
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline int hsch(struct subchannel_id schid)
|
static inline int hsch(struct subchannel_id schid)
|
||||||
{
|
{
|
||||||
register struct subchannel_id reg1 asm("1") = schid;
|
register struct subchannel_id reg1 asm("1") = schid;
|
||||||
|
|
|
@ -3,6 +3,8 @@
|
||||||
|
|
||||||
#include <asm/chpid.h>
|
#include <asm/chpid.h>
|
||||||
#include <asm/schid.h>
|
#include <asm/schid.h>
|
||||||
|
#include "orb.h"
|
||||||
|
#include "cio.h"
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* TPI info structure
|
* TPI info structure
|
||||||
|
@ -87,6 +89,38 @@ static inline int tsch(struct subchannel_id schid, struct irb *addr)
|
||||||
return ccode;
|
return ccode;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline int ssch(struct subchannel_id schid, union orb *addr)
|
||||||
|
{
|
||||||
|
register struct subchannel_id reg1 asm("1") = schid;
|
||||||
|
int ccode = -EIO;
|
||||||
|
|
||||||
|
asm volatile(
|
||||||
|
" ssch 0(%2)\n"
|
||||||
|
"0: ipm %0\n"
|
||||||
|
" srl %0,28\n"
|
||||||
|
"1:\n"
|
||||||
|
EX_TABLE(0b, 1b)
|
||||||
|
: "+d" (ccode)
|
||||||
|
: "d" (reg1), "a" (addr), "m" (*addr)
|
||||||
|
: "cc", "memory");
|
||||||
|
return ccode;
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline int csch(struct subchannel_id schid)
|
||||||
|
{
|
||||||
|
register struct subchannel_id reg1 asm("1") = schid;
|
||||||
|
int ccode;
|
||||||
|
|
||||||
|
asm volatile(
|
||||||
|
" csch\n"
|
||||||
|
" ipm %0\n"
|
||||||
|
" srl %0,28"
|
||||||
|
: "=d" (ccode)
|
||||||
|
: "d" (reg1)
|
||||||
|
: "cc");
|
||||||
|
return ccode;
|
||||||
|
}
|
||||||
|
|
||||||
static inline int tpi(struct tpi_info *addr)
|
static inline int tpi(struct tpi_info *addr)
|
||||||
{
|
{
|
||||||
int ccode;
|
int ccode;
|
||||||
|
|
Reference in New Issue