diff options
author | Heiko Carstens <heiko.carstens@de.ibm.com> | 2005-10-30 18:00:11 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@g5.osdl.org> | 2005-10-30 20:37:16 -0500 |
commit | 1e8e338325fa0f2bd5c1c800086e900cf188d2cd (patch) | |
tree | fd1e051c0883725d3b24ec9acb428aeddaccf07b /arch/s390/kernel/head.S | |
parent | ed3cb6f039bb296457bfd2877cba6ad0287d8d54 (diff) |
[PATCH] s390: export ipl device parameters
Sysfs interface to export ipl device parameters. Dependent on the ipl type
the interface will look like this:
- ccw ipl:
/sys/firmware/ipl/device
/ipl_type
- fcp ipl:
/sys/firmware/ipl/binary_parameter
/bootprog
/br_lba
/device
/ipl_type
/lun
/scp_data
/wwpn
- otherwise (unknown that is):
/sys/firmware/ipl/ipl_type
Acked-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
Signed-off-by: Heiko Carstens <heiko.carstens@de.ibm.com>
Cc: Greg KH <greg@kroah.com>
Signed-off-by: Heiko Carstens <heiko.carstens@de.ibm.com>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'arch/s390/kernel/head.S')
-rw-r--r-- | arch/s390/kernel/head.S | 72 |
1 files changed, 67 insertions, 5 deletions
diff --git a/arch/s390/kernel/head.S b/arch/s390/kernel/head.S index 55654b6e16dc..039354d72348 100644 --- a/arch/s390/kernel/head.S +++ b/arch/s390/kernel/head.S | |||
@@ -485,7 +485,9 @@ start: | |||
485 | # | 485 | # |
486 | .org 0x10000 | 486 | .org 0x10000 |
487 | startup:basr %r13,0 # get base | 487 | startup:basr %r13,0 # get base |
488 | .LPG1: lctl %c0,%c15,.Lctl-.LPG1(%r13) # load control registers | 488 | .LPG1: l %r1, .Lget_ipl_device_addr-.LPG1(%r13) |
489 | basr %r14, %r1 | ||
490 | lctl %c0,%c15,.Lctl-.LPG1(%r13) # load control registers | ||
489 | la %r12,_pstart-.LPG1(%r13) # pointer to parameter area | 491 | la %r12,_pstart-.LPG1(%r13) # pointer to parameter area |
490 | # move IPL device to lowcore | 492 | # move IPL device to lowcore |
491 | mvc __LC_IPLDEV(4),IPL_DEVICE-PARMAREA(%r12) | 493 | mvc __LC_IPLDEV(4),IPL_DEVICE-PARMAREA(%r12) |
@@ -560,6 +562,9 @@ startup:basr %r13,0 # get base | |||
560 | mr %r2,%r1 # mem size in bytes in %r3 | 562 | mr %r2,%r1 # mem size in bytes in %r3 |
561 | b .Lfchunk-.LPG1(%r13) | 563 | b .Lfchunk-.LPG1(%r13) |
562 | 564 | ||
565 | .align 4 | ||
566 | .Lget_ipl_device_addr: | ||
567 | .long .Lget_ipl_device | ||
563 | .Lpmask: | 568 | .Lpmask: |
564 | .byte 0 | 569 | .byte 0 |
565 | .align 8 | 570 | .align 8 |
@@ -755,6 +760,63 @@ _pstart: | |||
755 | .global _pend | 760 | .global _pend |
756 | _pend: | 761 | _pend: |
757 | 762 | ||
763 | .Lget_ipl_device: | ||
764 | basr %r12,0 | ||
765 | .LPG2: l %r1,0xb8 # get sid | ||
766 | sll %r1,15 # test if subchannel is enabled | ||
767 | srl %r1,31 | ||
768 | ltr %r1,%r1 | ||
769 | bz 0(%r14) # subchannel disabled | ||
770 | l %r1,0xb8 | ||
771 | la %r5,.Lipl_schib-.LPG2(%r12) | ||
772 | stsch 0(%r5) # get schib of subchannel | ||
773 | bnz 0(%r14) # schib not available | ||
774 | tm 5(%r5),0x01 # devno valid? | ||
775 | bno 0(%r14) | ||
776 | la %r6,ipl_parameter_flags-.LPG2(%r12) | ||
777 | oi 3(%r6),0x01 # set flag | ||
778 | la %r2,ipl_devno-.LPG2(%r12) | ||
779 | mvc 0(2,%r2),6(%r5) # store devno | ||
780 | tm 4(%r5),0x80 # qdio capable device? | ||
781 | bno 0(%r14) | ||
782 | oi 3(%r6),0x02 # set flag | ||
783 | |||
784 | # copy ipl parameters | ||
785 | |||
786 | lhi %r0,4096 | ||
787 | l %r2,20(%r0) # get address of parameter list | ||
788 | lhi %r3,IPL_PARMBLOCK_ORIGIN | ||
789 | st %r3,20(%r0) | ||
790 | lhi %r4,1 | ||
791 | cr %r2,%r3 # start parameters < destination ? | ||
792 | jl 0f | ||
793 | lhi %r1,1 # copy direction is upwards | ||
794 | j 1f | ||
795 | 0: lhi %r1,-1 # copy direction is downwards | ||
796 | ar %r2,%r0 | ||
797 | ar %r3,%r0 | ||
798 | ar %r2,%r1 | ||
799 | ar %r3,%r1 | ||
800 | 1: mvc 0(1,%r3),0(%r2) # finally copy ipl parameters | ||
801 | ar %r3,%r1 | ||
802 | ar %r2,%r1 | ||
803 | sr %r0,%r4 | ||
804 | jne 1b | ||
805 | b 0(%r14) | ||
806 | |||
807 | .align 4 | ||
808 | .Lipl_schib: | ||
809 | .rept 13 | ||
810 | .long 0 | ||
811 | .endr | ||
812 | |||
813 | .globl ipl_parameter_flags | ||
814 | ipl_parameter_flags: | ||
815 | .long 0 | ||
816 | .globl ipl_devno | ||
817 | ipl_devno: | ||
818 | .word 0 | ||
819 | |||
758 | #ifdef CONFIG_SHARED_KERNEL | 820 | #ifdef CONFIG_SHARED_KERNEL |
759 | .org 0x100000 | 821 | .org 0x100000 |
760 | #endif | 822 | #endif |
@@ -764,11 +826,11 @@ _pend: | |||
764 | # | 826 | # |
765 | .globl _stext | 827 | .globl _stext |
766 | _stext: basr %r13,0 # get base | 828 | _stext: basr %r13,0 # get base |
767 | .LPG2: | 829 | .LPG3: |
768 | # | 830 | # |
769 | # Setup stack | 831 | # Setup stack |
770 | # | 832 | # |
771 | l %r15,.Linittu-.LPG2(%r13) | 833 | l %r15,.Linittu-.LPG3(%r13) |
772 | mvc __LC_CURRENT(4),__TI_task(%r15) | 834 | mvc __LC_CURRENT(4),__TI_task(%r15) |
773 | ahi %r15,1<<(PAGE_SHIFT+THREAD_ORDER) # init_task_union + THREAD_SIZE | 835 | ahi %r15,1<<(PAGE_SHIFT+THREAD_ORDER) # init_task_union + THREAD_SIZE |
774 | st %r15,__LC_KERNEL_STACK # set end of kernel stack | 836 | st %r15,__LC_KERNEL_STACK # set end of kernel stack |
@@ -782,8 +844,8 @@ _stext: basr %r13,0 # get base | |||
782 | lctl %c0,%c15,0(%r15) | 844 | lctl %c0,%c15,0(%r15) |
783 | 845 | ||
784 | # | 846 | # |
785 | lam 0,15,.Laregs-.LPG2(%r13) # load access regs needed by uaccess | 847 | lam 0,15,.Laregs-.LPG3(%r13) # load access regs needed by uaccess |
786 | l %r14,.Lstart-.LPG2(%r13) | 848 | l %r14,.Lstart-.LPG3(%r13) |
787 | basr %r14,%r14 # call start_kernel | 849 | basr %r14,%r14 # call start_kernel |
788 | # | 850 | # |
789 | # We returned from start_kernel ?!? PANIK | 851 | # We returned from start_kernel ?!? PANIK |