1*91b48298SAxel Dörfler /* 2*91b48298SAxel Dörfler ** Copyright 2003, Axel Dörfler, axeld@pinc-software.de. All rights reserved. 3*91b48298SAxel Dörfler ** Distributed under the terms of the OpenBeOS License. 4*91b48298SAxel Dörfler */ 5*91b48298SAxel Dörfler #ifndef AMIGA_RDB_H 6*91b48298SAxel Dörfler #define AMIGA_RDB_H 7*91b48298SAxel Dörfler 8*91b48298SAxel Dörfler 9*91b48298SAxel Dörfler #include "SupportDefs.h" 10*91b48298SAxel Dörfler #include "ByteOrder.h" 11*91b48298SAxel Dörfler 12*91b48298SAxel Dörfler 13*91b48298SAxel Dörfler struct rigid_disk_block { 14*91b48298SAxel Dörfler uint32 id; 15*91b48298SAxel Dörfler uint32 summed_longs; 16*91b48298SAxel Dörfler int32 check_sum; 17*91b48298SAxel Dörfler uint32 host_id; 18*91b48298SAxel Dörfler uint32 block_size; 19*91b48298SAxel Dörfler uint32 flags; 20*91b48298SAxel Dörfler 21*91b48298SAxel Dörfler /* block list heads */ 22*91b48298SAxel Dörfler 23*91b48298SAxel Dörfler uint32 bad_block_list; 24*91b48298SAxel Dörfler uint32 partition_list; 25*91b48298SAxel Dörfler uint32 fs_header_list; 26*91b48298SAxel Dörfler uint32 drive_init; 27*91b48298SAxel Dörfler 28*91b48298SAxel Dörfler uint32 __reserved1[6]; 29*91b48298SAxel Dörfler 30*91b48298SAxel Dörfler /* physical drive characteristics */ 31*91b48298SAxel Dörfler 32*91b48298SAxel Dörfler uint32 cylinders; 33*91b48298SAxel Dörfler uint32 sectors; 34*91b48298SAxel Dörfler uint32 heads; 35*91b48298SAxel Dörfler uint32 interleave; 36*91b48298SAxel Dörfler uint32 park; 37*91b48298SAxel Dörfler uint32 __reserved2[3]; 38*91b48298SAxel Dörfler uint32 write_precompensation; 39*91b48298SAxel Dörfler uint32 reduced_write; 40*91b48298SAxel Dörfler uint32 step_rate; 41*91b48298SAxel Dörfler uint32 __reserved3[5]; 42*91b48298SAxel Dörfler 43*91b48298SAxel Dörfler /* logical drive characteristics */ 44*91b48298SAxel Dörfler 45*91b48298SAxel Dörfler uint32 rdb_blocks_low; 46*91b48298SAxel Dörfler uint32 rdb_blocks_high; 47*91b48298SAxel Dörfler uint32 low_cylinder; 48*91b48298SAxel Dörfler uint32 high_cylinder; 49*91b48298SAxel Dörfler uint32 cylinder_blocks; 50*91b48298SAxel Dörfler uint32 auto_park_seconds; 51*91b48298SAxel Dörfler 52*91b48298SAxel Dörfler uint32 __reserved4[2]; 53*91b48298SAxel Dörfler 54*91b48298SAxel Dörfler /* drive identification */ 55*91b48298SAxel Dörfler 56*91b48298SAxel Dörfler char disk_vendor[8]; 57*91b48298SAxel Dörfler char disk_product[16]; 58*91b48298SAxel Dörfler char disk_revision[4]; 59*91b48298SAxel Dörfler char controller_vendor[8]; 60*91b48298SAxel Dörfler char controller_product[16]; 61*91b48298SAxel Dörfler char controller_revision[4]; 62*91b48298SAxel Dörfler 63*91b48298SAxel Dörfler uint32 __reserved5[10]; 64*91b48298SAxel Dörfler }; 65*91b48298SAxel Dörfler 66*91b48298SAxel Dörfler #define RDB_DISK_ID 'RDSK' 67*91b48298SAxel Dörfler 68*91b48298SAxel Dörfler #define RDB_LOCATION_LIMIT 16 69*91b48298SAxel Dörfler 70*91b48298SAxel Dörfler enum rdb_flags { 71*91b48298SAxel Dörfler RDB_LAST = 0x01, 72*91b48298SAxel Dörfler RDB_LAST_LUN = 0x02, 73*91b48298SAxel Dörfler RDB_LAST_TID = 0x04, 74*91b48298SAxel Dörfler RDB_NO_RESELECT = 0x08, 75*91b48298SAxel Dörfler RDB_HAS_DISK_ID = 0x10, 76*91b48298SAxel Dörfler RDB_HAS_CONTROLLER_ID = 0x20, 77*91b48298SAxel Dörfler RDB_SUPPORTS_SYNCHRONOUS = 0x40, 78*91b48298SAxel Dörfler }; 79*91b48298SAxel Dörfler 80*91b48298SAxel Dörfler 81*91b48298SAxel Dörfler /************* bad blocks *************/ 82*91b48298SAxel Dörfler 83*91b48298SAxel Dörfler struct bad_block_entry { 84*91b48298SAxel Dörfler }; 85*91b48298SAxel Dörfler 86*91b48298SAxel Dörfler struct bad_block_block { 87*91b48298SAxel Dörfler }; 88*91b48298SAxel Dörfler 89*91b48298SAxel Dörfler #define RDB_BAD_BLOCK_ID 'BADB' 90*91b48298SAxel Dörfler 91*91b48298SAxel Dörfler 92*91b48298SAxel Dörfler /************* partition block *************/ 93*91b48298SAxel Dörfler 94*91b48298SAxel Dörfler struct partition_block { 95*91b48298SAxel Dörfler uint32 id; 96*91b48298SAxel Dörfler uint32 summed_longs; 97*91b48298SAxel Dörfler int32 check_sum; 98*91b48298SAxel Dörfler uint32 host_id; 99*91b48298SAxel Dörfler uint32 next; 100*91b48298SAxel Dörfler uint32 flags; 101*91b48298SAxel Dörfler uint32 __reserved1[2]; 102*91b48298SAxel Dörfler uint32 open_device_flags; 103*91b48298SAxel Dörfler uint8 drive_name[32]; // BSTR form (Pascal like string) 104*91b48298SAxel Dörfler 105*91b48298SAxel Dörfler uint32 __reserved2[15]; 106*91b48298SAxel Dörfler uint32 environment[17]; 107*91b48298SAxel Dörfler uint32 __reserved3[15]; 108*91b48298SAxel Dörfler }; 109*91b48298SAxel Dörfler 110*91b48298SAxel Dörfler #define RDB_PARTITION_ID 'PART' 111*91b48298SAxel Dörfler 112*91b48298SAxel Dörfler enum rdb_partition_flags { 113*91b48298SAxel Dörfler RDB_PARTITION_BOOTABLE = 0x01, 114*91b48298SAxel Dörfler RDB_PARTITION_NO_MOUNT = 0x02, 115*91b48298SAxel Dörfler }; 116*91b48298SAxel Dörfler 117*91b48298SAxel Dörfler 118*91b48298SAxel Dörfler /************* disk environment *************/ 119*91b48298SAxel Dörfler 120*91b48298SAxel Dörfler struct disk_environment { 121*91b48298SAxel Dörfler uint32 table_size; // size of this environment 122*91b48298SAxel Dörfler uint32 long_block_size; // block size in longs (128 == 512 byte) 123*91b48298SAxel Dörfler uint32 sec_org; // always 0 124*91b48298SAxel Dörfler uint32 surfaces; 125*91b48298SAxel Dörfler uint32 sectors_per_block; 126*91b48298SAxel Dörfler uint32 blocks_per_track; 127*91b48298SAxel Dörfler uint32 reserved_blocks_at_start; 128*91b48298SAxel Dörfler uint32 reserved_blocks_at_end; 129*91b48298SAxel Dörfler uint32 interleave; 130*91b48298SAxel Dörfler uint32 first_cylinder; 131*91b48298SAxel Dörfler uint32 last_cylinder; 132*91b48298SAxel Dörfler uint32 num_buffers; 133*91b48298SAxel Dörfler uint32 buffer_mem_type; 134*91b48298SAxel Dörfler uint32 max_transfer; 135*91b48298SAxel Dörfler uint32 dma_mask; 136*91b48298SAxel Dörfler int32 boot_priority; 137*91b48298SAxel Dörfler uint32 dos_type; 138*91b48298SAxel Dörfler uint32 baud_rate; 139*91b48298SAxel Dörfler uint32 control; 140*91b48298SAxel Dörfler uint32 boot_blocks; 141*91b48298SAxel Dörfler 142*91b48298SAxel Dörfler uint32 FirstCylinder() { return B_BENDIAN_TO_HOST_INT32(first_cylinder); } 143*91b48298SAxel Dörfler uint32 LastCylinder() { return B_BENDIAN_TO_HOST_INT32(last_cylinder); } 144*91b48298SAxel Dörfler uint32 Surfaces() { return B_BENDIAN_TO_HOST_INT32(surfaces); } 145*91b48298SAxel Dörfler uint32 BlocksPerTrack() { return B_BENDIAN_TO_HOST_INT32(blocks_per_track); } 146*91b48298SAxel Dörfler uint32 LongBlockSize() { return B_BENDIAN_TO_HOST_INT32(long_block_size); } 147*91b48298SAxel Dörfler 148*91b48298SAxel Dörfler uint64 Start() 149*91b48298SAxel Dörfler { 150*91b48298SAxel Dörfler return uint64(FirstCylinder()) * BlocksPerTrack() * Surfaces() 151*91b48298SAxel Dörfler * LongBlockSize() * sizeof(long); 152*91b48298SAxel Dörfler } 153*91b48298SAxel Dörfler 154*91b48298SAxel Dörfler uint64 Size() 155*91b48298SAxel Dörfler { 156*91b48298SAxel Dörfler return uint64(LastCylinder() + 1 - FirstCylinder()) * BlocksPerTrack() * Surfaces() 157*91b48298SAxel Dörfler * LongBlockSize() * sizeof(long); 158*91b48298SAxel Dörfler } 159*91b48298SAxel Dörfler }; 160*91b48298SAxel Dörfler 161*91b48298SAxel Dörfler 162*91b48298SAxel Dörfler /************* file system header block *************/ 163*91b48298SAxel Dörfler 164*91b48298SAxel Dörfler struct fs_header_block { 165*91b48298SAxel Dörfler }; 166*91b48298SAxel Dörfler 167*91b48298SAxel Dörfler #define RDB_FS_HEADER_ID 'FSHD' 168*91b48298SAxel Dörfler 169*91b48298SAxel Dörfler struct load_seg_block { 170*91b48298SAxel Dörfler }; 171*91b48298SAxel Dörfler 172*91b48298SAxel Dörfler #define RDB_LOAD_SEG_ID 'LSEG' 173*91b48298SAxel Dörfler 174*91b48298SAxel Dörfler #endif /* AMIGA_RDB_H */ 175*91b48298SAxel Dörfler 176