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