pc-bios/s390-ccw: handle more ECKD DASD block sizes
Using dasdfmt(8) to format a DASD allows to choose a block size. There are four supported values: 512, 1024, 2048, and 4096 bytes per block. Each block size leads to selection of new count of sectors per track. The head count remains always the same: 15. This empiric knowledge is used to detect ECKD DASD to IPL from. Signed-off-by: Eugene (jno) Dvurechenski <jno@linux.vnet.ibm.com> Reviewed-by: David Hildenbrand <dahi@linux.vnet.ibm.com> Acked-by: Christian Borntraeger <borntraeger@de.ibm.com> Signed-off-by: Jens Freimann <jfrei@linux.vnet.ibm.com> Signed-off-by: Christian Borntraeger <borntraeger@de.ibm.com>
This commit is contained in:
		
							parent
							
								
									92cb05574b
								
							
						
					
					
						commit
						00a47e7e71
					
				| @ -299,14 +299,35 @@ bool virtio_disk_is_scsi(void) | |||||||
|         && (virtio_get_block_size()  == 512); |         && (virtio_get_block_size()  == 512); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | /*
 | ||||||
|  |  * Other supported value pairs, if any, would need to be added here. | ||||||
|  |  * Note: head count is always 15. | ||||||
|  |  */ | ||||||
|  | static inline u8 virtio_eckd_sectors_for_block_size(int size) | ||||||
|  | { | ||||||
|  |     switch (size) { | ||||||
|  |     case 512: | ||||||
|  |         return 49; | ||||||
|  |     case 1024: | ||||||
|  |         return 33; | ||||||
|  |     case 2048: | ||||||
|  |         return 21; | ||||||
|  |     case 4096: | ||||||
|  |         return 12; | ||||||
|  |     } | ||||||
|  |     return 0; | ||||||
|  | } | ||||||
|  | 
 | ||||||
| bool virtio_disk_is_eckd(void) | bool virtio_disk_is_eckd(void) | ||||||
| { | { | ||||||
|  |     const int block_size = virtio_get_block_size(); | ||||||
|  | 
 | ||||||
|     if (guessed_disk_nature) { |     if (guessed_disk_nature) { | ||||||
|         return (virtio_get_block_size()  == 4096); |         return (block_size  == 4096); | ||||||
|     } |     } | ||||||
|     return (blk_cfg.geometry.heads == 15) |     return (blk_cfg.geometry.heads == 15) | ||||||
|         && (blk_cfg.geometry.sectors == 12) |         && (blk_cfg.geometry.sectors == | ||||||
|         && (virtio_get_block_size()  == 4096); |             virtio_eckd_sectors_for_block_size(block_size)); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| bool virtio_ipl_disk_is_valid(void) | bool virtio_ipl_disk_is_valid(void) | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Eugene (jno) Dvurechenski
						Eugene (jno) Dvurechenski