1 /* 2 * (C) Copyright 2000 3 * Hans-Joerg Frieden, Hyperion Entertainment 4 * Hans-JoergF@hyperion-entertainment.com 5 * 6 * See file CREDITS for list of people who contributed to this 7 * project. 8 * 9 * This program is free software; you can redistribute it and/or 10 * modify it under the terms of the GNU General Public License as 11 * published by the Free Software Foundation; either version 2 of 12 * the License, or (at your option) any later version. 13 * 14 * This program is distributed in the hope that it will be useful, 15 * but WITHOUT ANY WARRANTY; without even the implied warranty of 16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 17 * GNU General Public License for more details. 18 * 19 * You should have received a copy of the GNU General Public License 20 * along with this program; if not, write to the Free Software 21 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, 22 * MA 02111-1307 USA 23 */ 24 25 #ifndef _DISK_PART_AMIGA_H 26 #define _DISK_PART_AMIGA_H 27 #include <common.h> 28 29 #ifdef CONFIG_ISO_PARTITION 30 /* Make the buffers bigger if ISO partition support is enabled -- CD-ROMS 31 have 2048 byte blocks */ 32 #define DEFAULT_SECTOR_SIZE 2048 33 #else 34 #define DEFAULT_SECTOR_SIZE 512 35 #endif 36 37 38 #define AMIGA_BLOCK_LIMIT 16 39 40 /* 41 * Amiga disks have a very open structure. The head for the partition table information 42 * is stored somewhere within the first 16 blocks on disk, and is called the 43 * "RigidDiskBlock". 44 */ 45 46 struct rigid_disk_block 47 { 48 u32 id; 49 u32 summed_longs; 50 s32 chk_sum; 51 u32 host_id; 52 u32 block_bytes; 53 u32 flags; 54 u32 bad_block_list; 55 u32 partition_list; 56 u32 file_sys_header_list; 57 u32 drive_init; 58 u32 bootcode_block; 59 u32 reserved_1[5]; 60 61 /* Physical drive geometry */ 62 u32 cylinders; 63 u32 sectors; 64 u32 heads; 65 u32 interleave; 66 u32 park; 67 u32 reserved_2[3]; 68 u32 write_pre_comp; 69 u32 reduced_write; 70 u32 step_rate; 71 u32 reserved_3[5]; 72 73 /* logical drive geometry */ 74 u32 rdb_blocks_lo; 75 u32 rdb_blocks_hi; 76 u32 lo_cylinder; 77 u32 hi_cylinder; 78 u32 cyl_blocks; 79 u32 auto_park_seconds; 80 u32 high_rdsk_block; 81 u32 reserved_4; 82 83 char disk_vendor[8]; 84 char disk_product[16]; 85 char disk_revision[4]; 86 char controller_vendor[8]; 87 char controller_product[16]; 88 char controller_revision[4]; 89 90 u32 reserved_5[10]; 91 }; 92 93 /* 94 * Each partition on this drive is defined by such a block 95 */ 96 97 struct partition_block 98 { 99 u32 id; 100 u32 summed_longs; 101 s32 chk_sum; 102 u32 host_id; 103 u32 next; 104 u32 flags; 105 u32 reserved_1[2]; 106 u32 dev_flags; 107 char drive_name[32]; 108 u32 reserved_2[15]; 109 u32 environment[17]; 110 u32 reserved_3[15]; 111 }; 112 113 struct bootcode_block 114 { 115 u32 id; 116 u32 summed_longs; 117 s32 chk_sum; 118 u32 host_id; 119 u32 next; 120 u32 load_data[123]; 121 }; 122 123 124 #define AMIGA_ID_RDISK 0x5244534B 125 #define AMIGA_ID_PART 0x50415254 126 #define AMIGA_ID_BOOT 0x424f4f54 127 128 /* 129 * The environment array in the partition block 130 * describes the partition 131 */ 132 133 struct amiga_part_geometry 134 { 135 u32 table_size; 136 u32 size_blocks; 137 u32 unused1; 138 u32 surfaces; 139 u32 sector_per_block; 140 u32 block_per_track; 141 u32 reserved; 142 u32 prealloc; 143 u32 interleave; 144 u32 low_cyl; 145 u32 high_cyl; 146 u32 num_buffers; 147 u32 buf_mem_type; 148 u32 max_transfer; 149 u32 mask; 150 s32 boot_priority; 151 u32 dos_type; 152 u32 baud; 153 u32 control; 154 u32 boot_blocks; 155 }; 156 157 #endif /* _DISK_PART_AMIGA_H_ */ 158