Skip to content
Snippets Groups Projects
part_amiga.h 2.71 KiB
Newer Older
  • Learn to ignore specific revisions
  • /*
     * (C) Copyright 2000
     * Hans-Joerg Frieden, Hyperion Entertainment
     * Hans-JoergF@hyperion-entertainment.com
     *
    
     * SPDX-License-Identifier:	GPL-2.0+
    
     */
    
    #ifndef _DISK_PART_AMIGA_H
    #define _DISK_PART_AMIGA_H
    #include <common.h>
    
    
    #if CONFIG_IS_ENABLED(ISO_PARTITION)
    
    /* Make the buffers bigger if ISO partition support is enabled -- CD-ROMS
       have 2048 byte blocks */
    #define DEFAULT_SECTOR_SIZE   2048
    #else
    #define DEFAULT_SECTOR_SIZE	512
    #endif
    
    
    #define AMIGA_BLOCK_LIMIT 16
    
    /*
     * Amiga disks have a very open structure. The head for the partition table information
     * is stored somewhere within the first 16 blocks on disk, and is called the
     * "RigidDiskBlock".
     */
    
    
    Wolfgang Denk's avatar
    Wolfgang Denk committed
    struct rigid_disk_block
    
    {
        u32 id;
        u32 summed_longs;
        s32 chk_sum;
        u32 host_id;
        u32 block_bytes;
        u32 flags;
        u32 bad_block_list;
        u32 partition_list;
        u32 file_sys_header_list;
        u32 drive_init;
        u32 bootcode_block;
        u32 reserved_1[5];
    
    Wolfgang Denk's avatar
    Wolfgang Denk committed
    
    
        /* Physical drive geometry */
        u32 cylinders;
        u32 sectors;
        u32 heads;
        u32 interleave;
        u32 park;
        u32 reserved_2[3];
        u32 write_pre_comp;
        u32 reduced_write;
        u32 step_rate;
        u32 reserved_3[5];
    
        /* logical drive geometry */
        u32 rdb_blocks_lo;
        u32 rdb_blocks_hi;
        u32 lo_cylinder;
        u32 hi_cylinder;
        u32 cyl_blocks;
        u32 auto_park_seconds;
        u32 high_rdsk_block;
        u32 reserved_4;
    
    Wolfgang Denk's avatar
    Wolfgang Denk committed
    
    
        char disk_vendor[8];
        char disk_product[16];
        char disk_revision[4];
        char controller_vendor[8];
        char controller_product[16];
        char controller_revision[4];
    
    Wolfgang Denk's avatar
    Wolfgang Denk committed
    
    
        u32 reserved_5[10];
    };
    
    /*
     * Each partition on this drive is defined by such a block
     */
    
    
    Wolfgang Denk's avatar
    Wolfgang Denk committed
    struct partition_block
    
    {
        u32 id;
        u32 summed_longs;
        s32 chk_sum;
        u32 host_id;
        u32 next;
        u32 flags;
        u32 reserved_1[2];
        u32 dev_flags;
        char drive_name[32];
        u32 reserved_2[15];
        u32 environment[17];
        u32 reserved_3[15];
    };
    
    
    Wolfgang Denk's avatar
    Wolfgang Denk committed
    struct bootcode_block
    
    {
        u32   id;
        u32   summed_longs;
        s32   chk_sum;
        u32   host_id;
        u32   next;
        u32   load_data[123];
    };
    
    
    #define AMIGA_ID_RDISK                  0x5244534B
    #define AMIGA_ID_PART                   0x50415254
    #define AMIGA_ID_BOOT                   0x424f4f54
    
    
    Wolfgang Denk's avatar
    Wolfgang Denk committed
    /*
    
     * The environment array in the partition block
     * describes the partition
     */
    
    
    Wolfgang Denk's avatar
    Wolfgang Denk committed
    struct amiga_part_geometry
    
    {
        u32 table_size;
        u32 size_blocks;
        u32 unused1;
        u32 surfaces;
        u32 sector_per_block;
        u32 block_per_track;
        u32 reserved;
        u32 prealloc;
        u32 interleave;
        u32 low_cyl;
        u32 high_cyl;
        u32 num_buffers;
        u32 buf_mem_type;
        u32 max_transfer;
        u32 mask;
        s32 boot_priority;
        u32 dos_type;
        u32 baud;
        u32 control;
        u32 boot_blocks;
    };
    
    #endif /* _DISK_PART_AMIGA_H_ */