Home | History | Annotate | Download | only in disk
      1 /* SPDX-License-Identifier: GPL-2.0+ */
      2 /*
      3  * (C) Copyright 2000
      4  * Hans-Joerg Frieden, Hyperion Entertainment
      5  * Hans-JoergF (at) hyperion-entertainment.com
      6  */
      7 
      8 #ifndef _DISK_PART_AMIGA_H
      9 #define _DISK_PART_AMIGA_H
     10 #include <common.h>
     11 
     12 #if CONFIG_IS_ENABLED(ISO_PARTITION)
     13 /* Make the buffers bigger if ISO partition support is enabled -- CD-ROMS
     14    have 2048 byte blocks */
     15 #define DEFAULT_SECTOR_SIZE   2048
     16 #else
     17 #define DEFAULT_SECTOR_SIZE	512
     18 #endif
     19 
     20 
     21 #define AMIGA_BLOCK_LIMIT 16
     22 
     23 /*
     24  * Amiga disks have a very open structure. The head for the partition table information
     25  * is stored somewhere within the first 16 blocks on disk, and is called the
     26  * "RigidDiskBlock".
     27  */
     28 
     29 struct rigid_disk_block
     30 {
     31     u32 id;
     32     u32 summed_longs;
     33     s32 chk_sum;
     34     u32 host_id;
     35     u32 block_bytes;
     36     u32 flags;
     37     u32 bad_block_list;
     38     u32 partition_list;
     39     u32 file_sys_header_list;
     40     u32 drive_init;
     41     u32 bootcode_block;
     42     u32 reserved_1[5];
     43 
     44     /* Physical drive geometry */
     45     u32 cylinders;
     46     u32 sectors;
     47     u32 heads;
     48     u32 interleave;
     49     u32 park;
     50     u32 reserved_2[3];
     51     u32 write_pre_comp;
     52     u32 reduced_write;
     53     u32 step_rate;
     54     u32 reserved_3[5];
     55 
     56     /* logical drive geometry */
     57     u32 rdb_blocks_lo;
     58     u32 rdb_blocks_hi;
     59     u32 lo_cylinder;
     60     u32 hi_cylinder;
     61     u32 cyl_blocks;
     62     u32 auto_park_seconds;
     63     u32 high_rdsk_block;
     64     u32 reserved_4;
     65 
     66     char disk_vendor[8];
     67     char disk_product[16];
     68     char disk_revision[4];
     69     char controller_vendor[8];
     70     char controller_product[16];
     71     char controller_revision[4];
     72 
     73     u32 reserved_5[10];
     74 };
     75 
     76 /*
     77  * Each partition on this drive is defined by such a block
     78  */
     79 
     80 struct partition_block
     81 {
     82     u32 id;
     83     u32 summed_longs;
     84     s32 chk_sum;
     85     u32 host_id;
     86     u32 next;
     87     u32 flags;
     88     u32 reserved_1[2];
     89     u32 dev_flags;
     90     char drive_name[32];
     91     u32 reserved_2[15];
     92     u32 environment[17];
     93     u32 reserved_3[15];
     94 };
     95 
     96 struct bootcode_block
     97 {
     98     u32   id;
     99     u32   summed_longs;
    100     s32   chk_sum;
    101     u32   host_id;
    102     u32   next;
    103     u32   load_data[123];
    104 };
    105 
    106 
    107 #define AMIGA_ID_RDISK                  0x5244534B
    108 #define AMIGA_ID_PART                   0x50415254
    109 #define AMIGA_ID_BOOT                   0x424f4f54
    110 
    111 /*
    112  * The environment array in the partition block
    113  * describes the partition
    114  */
    115 
    116 struct amiga_part_geometry
    117 {
    118     u32 table_size;
    119     u32 size_blocks;
    120     u32 unused1;
    121     u32 surfaces;
    122     u32 sector_per_block;
    123     u32 block_per_track;
    124     u32 reserved;
    125     u32 prealloc;
    126     u32 interleave;
    127     u32 low_cyl;
    128     u32 high_cyl;
    129     u32 num_buffers;
    130     u32 buf_mem_type;
    131     u32 max_transfer;
    132     u32 mask;
    133     s32 boot_priority;
    134     u32 dos_type;
    135     u32 baud;
    136     u32 control;
    137     u32 boot_blocks;
    138 };
    139 
    140 #endif /* _DISK_PART_AMIGA_H_ */
    141