qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Qemu-devel] [PATCH 10/10] S390: Enabling device and program selection


From: Dominik Dingel
Subject: [Qemu-devel] [PATCH 10/10] S390: Enabling device and program selection
Date: Fri, 26 Apr 2013 14:12:57 +0200

Pass the eboot device info and the loadparm in register 7 and 8.
Use this values in the BIOS to directly boot the respective
operating system.

Signed-off-by: Dominik Dingel <address@hidden>

diff --git a/hw/s390x/ipl.c b/hw/s390x/ipl.c
index 36daa67..960ba71 100644
--- a/hw/s390x/ipl.c
+++ b/hw/s390x/ipl.c
@@ -77,6 +77,10 @@ static void s390_ipl_from_disk(VirtIOBlkCcw *dev, uint64_t 
pswaddr)
     env->psw.addr = pswaddr;
     env->psw.mask = IPL_PSW_MASK;
     env->regs[7] = ccw_dev->sch->devno;
+    env->regs[7] = (env->regs[7] << 16) | (ccw_dev->sch->schid);
+    env->regs[7] = (env->regs[7] << 8) | (ccw_dev->sch->cssid);
+    env->regs[7] = (env->regs[7] << 8) | (ccw_dev->sch->ssid);
+    env->regs[8] = ccw_dev->loadparm;
     s390_add_running_cpu(cpu);
 }
 
diff --git a/pc-bios/s390-ccw.img b/pc-bios/s390-ccw.img
index 
b549a86e55194bbf54e25f839e52b490ac308260..fe8d2c6b9f5d937ea156084f7eb248b17e1fa89c
 100644
GIT binary patch
literal 17528
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
z<address@hidden)address@hidden&address@hidden>wy0<;MWr8x1fe0|KC8(z;Epz
zeyVK!x`)@_ppzYI;2V4p&rx&5o@@1cqCh={?*V*2;G2E$96rfHc=##!J;0v?{9k$D
address@hidden>*H6I<address@hidden<e(mzXt324Z3VZ|LUk7}n51#et
zDgY<FOA!BWE+XGdAH0gsg#rYENBm!&0sU3#=$8t>nLgtG@;address@hidden@a1IG9L7(^fO
z|JLrc(address@hidden@ZHzwdx`V0P+$1D^d$Dg2LX>AB%kjss&JW?
z3K&2Rx(E;Pe<g_fmDTWGT^*0)address@hidden<(upqg8o-1p5F7pEB{^co0sGY
zLI1^Zz!${rZ1A_lEx?Oc(E>#a6fID+K+yt43luF-v_R1UMGF)yP_#hN0{`zUK<DmF
z_zQey&lkkespJbcBsQ22|M#Ourr&vBpl-|fQ=e&Sy5FwB(>address@hidden
z+wGdY_}--z-<$CIJ=^g!gxZ1bfm9M-VTjsP=kb)NJvcBRYVjpQXYJwMqqPT*CVJxc
zB;address@hidden|?gL%;)}!-4H@<Vp%|z{?z9aOl%tvP~dIPOri3|Qe5TQAjxTS9*
zHSUTY!=CvD+`IDtt%nxer!jpq6m?hB=+fmGzB$YNe+H9Q2KE1u5JLT52`p99y5}O_
address@hidden|1z|^HF`8IxxjjK<)taUVJgH||5pO95w)QFJ&Z=>!OQ>C*Wz!ZcZ#?^
xsmIVMHP3x|`R~H2YySc}?Vxuobm1M1?{eX3q(8R14}vE<address@hidden)SLhS

literal 9432
zcmeHNZ){W76+h25c_s<r5hCiA2yP;address@hidden&Zm~|TsaUfPhLLGxp
zyJ^viw9r4pMQ!(GAFOuhO=~66jIN|Z>f406zuF>address@hidden@ovnXb=mw5D|A?sx9<
address@hidden&pG$p-#z!-_iTS}TVHP=pi#91Xc^jyp%=r23g7f-XG&3%Zl(q@
zsgV|<&$0`=aYGTk==FR`)NFbjpDH=lYw-9&5#9BAKJ|M1S%`b>s$R(JcjTFllXeXS
zE9#B=ROzwK|address@hidden@EQtMj`=7)Wxd_#>x%pNKf<address@hidden
zfjR<p1nLOX5vU_jN1%>C9f3Lmbp$>?0;Tue!xVK~`G9=LzJ!<gSFKsRw(6ymuBrG0
zeu2Wf{-s7wSm%hI)address@hidden(i8Po$ZXg+R(E(A0)address@hidden|f7
zV%^~Lt({hmTC7(|vtF0)+5)fRUCQb>&uJU5_REwoJn1z&LetRMN+C7Q@<Am(WX;Ms
address@hidden|VLC*c)vRonLi)v^TQCUzgw?zO`;wIM_%mdO;M1N&-WFJm
zE+4^Kb$QG&^4C!wD+pk8uOsp>;Y{Wu6td$OA7aaazo_+eU({!4oGtHxWnF&5`W+Gc
zZF9OXVQ4x)ofz9`{ecYY&zfr;mqjJlo9Ghc#6=h~A-do5+}a5o7^_>Yo1_GP%F4;V
zvB$wl=2J<vf1%o!tW{Dv=7&5>8+DdWeo(|address@hidden>uIO!7X95?#lFdZ
zCh~caFg_?u3wjE&kAZg)c)sSQD9U&SEiWRh)$j)^o`2t-#OGzU7T9Ckkofk+;3U~q
zM1y-7(fPN4wm$!+(z)me1HLJpTNPHmPL6i7oV?%|GZE^rE>address@hidden<Mu^
ztF<Cp1eqvpwQi&)#%_KRp3cGYEcTEb<address@hidden)=Pk|YuzY6!ip{{KNl(-VhV>o
zAgUscwlg=N)<X%$EW=N0wUnM+eO8USYDHOCdO=xgK<h0aqQU-e&^~V`fkP)e4>#-s
address@hidden;T+6ZbUg%Lq*Mr}hiQX)xHf;w<Q;address@hidden;I-cZFIy9a
zp+(j$U;hljW=>wQP0Z3|ZK4*;8g7W0ag(e~at<^MdgT<Ef!6L*H<*oRH389P>w2Qw
zH9=dnBw5Sh^;hJTlrh5|w7~;address@hidden@%RMv9HmeqArQ^ki
z<IbOx4_RR;d4|YT#CD7_az&)|jiz!>xhEmYG}R+G57-kn^1yFl%Py~&TCaF&UdZg&
z5-*$98abCV%UhG8y!qMj@<uaR-h#27Q{&}LQ{76QCWzYK*yk49LPEHO$nvQTim!4^
zEARIl_V1iJ1ETa=xxi-tv3#Cm+1jlU(EK%O5cMohbHp*QO(Dlb04(G9cH%~Wo|^sv
zMW>fh=Z?7DQ0l~Ynv2Z!M#vF%2q!siBNo98(W1z<)7$5z6NuwGM#rcbUBaWum*U}y
zj`69Exy5Ks#ce*NOG`=)`=~)XOyMN>)^23bxX}XdnxGBub{HaH-2g5q<dAoE*mi?y
z8v(U0>{#iHo8<gFU&LNSkSIg+Jn98&address@hidden
zIF&d%hoP|vUiGPQ&DyIWzk;9Ue&5H?UI|;w_wr?GYC+lHSm`S{!h}~TG6nDietQj*
zGwIeu(k&#(Eg&|64&ogcZzOs&x_}-f+Ugjrg}lHT0vg9<2|address@hidden
z>u*j8Q+WFyX`R}D6I8ihs(YVji{+J+FP$kL=G|u>a6T`x?<z+OBOVl9oZGbB$Zb1-
z+D7W;d<(address@hidden>;&=o<~~3bS=m&g^Zz2cZ9~1hE1neG?;4tqLDR_#_f<S
z*gyh%hp1p}wQEsN&b1JU5d%Bnp5e8bhWm5SanP65j9)($a$mt*uSC{hwspLRihl<p
address@hidden;kNXbN?_hW64XMtDi94CIa7<;}))dam=`WGoBW4IEP2$9_
zEWP~!Z1H`e&address@hidden<?SBs>zgRTvz$Dlms;+UWi_b{L1>h
z=lRtioqioL*+yTkMi~3`Q>address@hidden;UAg}IeIW$8&?#V0Rg58tz03g0<t
z&3-bitMAf#`!mCXX^|Th!=wFavFjdjAUk?U4E1NzBApp~u#xT>6-P7KTxN9b{^18j
zdhlpwU{D+wJu;address@hidden<lIFlBK`VVFX=zwRF4Q56Tim}0ihXzM-jXpnn
zWMqW-4`&V!!-8jgUv{uR?MwKYEU}59xVGqSKrwWeI%-GI7j&%h+sRS?Hx&FRg3#xJ
zL`-z^dZiqroj2_g+p^iwENRPww_x}%>LMxsjrGtIplQ&vQhvnB??^e9Laet*`SAqk
zX3#%^-YeymW1u<U8wLHbl>Z5Vo|p0}qCvY1+Jl=h1Ud)WgI$B2z&ByD4Hbz|JJ!;?
zxS(;zE3iZD+|address@hidden@lM8;>(A#2rD_6`ed~W5IUZe<9l;@P(lll|k#}_`<c%o^d
zxwoYd^u|~|$4$LR=b2*myZ%SMuf=Zg2HB6Fa8oY^nwdgAULy}l<qfX`Sg>4hGgFi;
zsJw=ExC8z;Q<N8bpRE3b1N&NtnR+qAzH#|kjs4!1ca`U`qp5Moz3GWjv6olqbugy&
address@hidden>1%nj27mVd
address@hidden>*zRR+=*4g|Q<SGaW4Cr+J&F2f9f3Lmbp+}Nd{G2A5%V1t
z+<address@hidden(pEd$x(b%*c^rt3^+&JJuua
zKR7V3wr5}W+Wp!7k%1wR#k0>?W^_cX+pvD)SG&address@hidden
zquBnjF^Y|h<_2R2M~=kyAIS`-*Jjcb%Z{e|bNv(>9NKpv+ka?q-%vXHX^&z9qlfrO
zsoIFKPqAIed&j;g2CUzN>OW?vD_$>xqY9pjR0;d{Sfx+ZOAL%9sQfI%MO~+O-l`N)
address@hidden@u+WC_4t1<{^hT((ecXvOz?F?zM>address@hidden(e|4JYC>7*wZsZj5E!dC|M
z{bklVRDb;yeeZuKMBe{UFrH(<no>address@hidden))PTyCh)fd3rkv9FyU??zSqxG&(*
zj<c0M-tDd_{(MaDM)muj)qk&|Re5x)+VJI>a;<p`s>address@hidden

diff --git a/pc-bios/s390-ccw/bootmap.c b/pc-bios/s390-ccw/bootmap.c
index 53a460d..9cd3edf 100644
--- a/pc-bios/s390-ccw/bootmap.c
+++ b/pc-bios/s390-ccw/bootmap.c
@@ -173,7 +173,7 @@ fail:
     return -1;
 }
 
-int zipl_load(void)
+int zipl_load(uint64_t load_parm)
 {
     struct mbr *mbr = (void*)sec;
     uint8_t *ns, *ns_end;
@@ -223,7 +223,7 @@ int zipl_load(void)
 
     /* Run the default entry */
 
-    prog_table_entry = (struct scsi_blockptr *)(sec + pte_len);
+    prog_table_entry = (struct scsi_blockptr *)(sec + (pte_len 
*(1+load_parm)));
 
     return zipl_run(prog_table_entry);
 
diff --git a/pc-bios/s390-ccw/main.c b/pc-bios/s390-ccw/main.c
index fd40fa5..0c1c11c 100644
--- a/pc-bios/s390-ccw/main.c
+++ b/pc-bios/s390-ccw/main.c
@@ -20,7 +20,7 @@ void virtio_panic(const char *string)
     while (1) { }
 }
 
-static void virtio_setup(void)
+static void virtio_setup(uint16_t dev_no)
 {
     struct schib schib;
     int i;
@@ -35,7 +35,7 @@ static void virtio_setup(void)
         if (r == 3) {
             break;
         }
-        if (schib.pmcw.dnv) {
+        if (schib.pmcw.dnv && (schib.pmcw.dev == dev_no)) {
             if (virtio_is_blk(blk_schid)) {
                 found = true;
                 break;
@@ -52,10 +52,24 @@ static void virtio_setup(void)
 
 int main(void)
 {
+    uint64_t boot_value;
+    uint64_t load_parm;
+    register uint64_t reg7 asm("7");
+    register uint64_t reg8 asm("8");
+    
+    asm volatile(
+            "   stg     %2, %0\n"
+            "   stg     %3, %1\n"
+            : "=m" (boot_value), "=m" (load_parm)
+            : "d" (reg7), "d" (reg8)
+            : "cc");
+    
     sclp_setup();
-    virtio_setup();
-    if (zipl_load() < 0)
+    virtio_setup(boot_value >> 32);
+
+    if (zipl_load(load_parm) < 0) {
         sclp_print("Failed to load OS from hard disk\n");
+    }
     disabled_wait();
     while (1) { }
 }
diff --git a/pc-bios/s390-ccw/s390-ccw.h b/pc-bios/s390-ccw/s390-ccw.h
index 8241b0a..2851995 100644
--- a/pc-bios/s390-ccw/s390-ccw.h
+++ b/pc-bios/s390-ccw/s390-ccw.h
@@ -63,7 +63,7 @@ void virtio_setup_block(struct subchannel_id schid);
 int virtio_read(ulong sector, void *load_addr);
 
 /* bootmap.c */
-int zipl_load(void);
+int zipl_load(uint64_t load_parm);
 
 static inline void *memset(void *s, int c, size_t n)
 {
-- 
1.7.9.5




reply via email to

[Prev in Thread] Current Thread [Next in Thread]