X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=disk%2Fpart_amiga.c;h=86d008d476e39fe3320f3c04da18ddb70c3fd2f5;hb=77c07e7ed36cae250a3562ee4bed0fa537960354;hp=c2daf6a6008910bba7eaf23296b1ee6bf96bc663;hpb=9eb468da3fd8753de55ab271d6ff5ed7f36d7ea2;p=oweals%2Fu-boot.git diff --git a/disk/part_amiga.c b/disk/part_amiga.c index c2daf6a600..86d008d476 100644 --- a/disk/part_amiga.c +++ b/disk/part_amiga.c @@ -1,36 +1,15 @@ +// SPDX-License-Identifier: GPL-2.0+ /* * (C) Copyright 2001 * Hans-Joerg Frieden, Hyperion Entertainment * Hans-JoergF@hyperion-entertainment.com - * - * See file CREDITS for list of people who contributed to this - * project. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of - * the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, - * MA 02111-1307 USA */ #include #include #include #include "part_amiga.h" -#if defined(CONFIG_CMD_IDE) || \ - defined(CONFIG_CMD_SCSI) || \ - defined(CONFIG_CMD_USB) || \ - defined(CONFIG_MMC) || \ - defined(CONFIG_SYSTEMACE) +#ifdef CONFIG_HAVE_BLOCK_DEVICE #undef AMIGA_DEBUG @@ -146,22 +125,21 @@ static void print_part_info(struct partition_block *p) * the ID AMIGA_ID_RDISK ('RDSK') and needs to have a valid * sum-to-zero checksum */ -struct rigid_disk_block *get_rdisk(block_dev_desc_t *dev_desc) +struct rigid_disk_block *get_rdisk(struct blk_desc *dev_desc) { int i; int limit; char *s; - s = getenv("amiga_scanlimit"); + s = env_get("amiga_scanlimit"); if (s) - limit = atoi(s); + limit = simple_strtoul(s, NULL, 10); else limit = AMIGA_BLOCK_LIMIT; for (i=0; iblock_read(dev_desc->dev, i, 1, - (ulong *)block_buffer); + ulong res = blk_dread(dev_desc, i, 1, (ulong *)block_buffer); if (res == 1) { struct rigid_disk_block *trdb = (struct rigid_disk_block *)block_buffer; @@ -187,15 +165,15 @@ struct rigid_disk_block *get_rdisk(block_dev_desc_t *dev_desc) * Ridgid disk block */ -struct bootcode_block *get_bootcode(block_dev_desc_t *dev_desc) +struct bootcode_block *get_bootcode(struct blk_desc *dev_desc) { int i; int limit; char *s; - s = getenv("amiga_scanlimit"); + s = env_get("amiga_scanlimit"); if (s) - limit = atoi(s); + limit = simple_strtoul(s, NULL, 10); else limit = AMIGA_BLOCK_LIMIT; @@ -203,7 +181,7 @@ struct bootcode_block *get_bootcode(block_dev_desc_t *dev_desc) for (i = 0; i < limit; i++) { - ulong res = dev_desc->block_read(dev_desc->dev, i, 1, (ulong *)block_buffer); + ulong res = blk_dread(dev_desc, i, 1, (ulong *)block_buffer); if (res == 1) { struct bootcode_block *boot = (struct bootcode_block *)block_buffer; @@ -228,27 +206,27 @@ struct bootcode_block *get_bootcode(block_dev_desc_t *dev_desc) * Test if the given partition has an Amiga partition table/Rigid * Disk block */ -int test_part_amiga(block_dev_desc_t *dev_desc) +static int part_test_amiga(struct blk_desc *dev_desc) { struct rigid_disk_block *rdb; struct bootcode_block *bootcode; - PRINTF("test_part_amiga: Testing for an Amiga RDB partition\n"); + PRINTF("part_test_amiga: Testing for an Amiga RDB partition\n"); rdb = get_rdisk(dev_desc); if (rdb) { bootcode = get_bootcode(dev_desc); if (bootcode) - PRINTF("test_part_amiga: bootable Amiga disk\n"); + PRINTF("part_test_amiga: bootable Amiga disk\n"); else - PRINTF("test_part_amiga: non-bootable Amiga disk\n"); + PRINTF("part_test_amiga: non-bootable Amiga disk\n"); return 0; } else { - PRINTF("test_part_amiga: no RDB found\n"); + PRINTF("part_test_amiga: no RDB found\n"); return -1; } @@ -257,7 +235,8 @@ int test_part_amiga(block_dev_desc_t *dev_desc) /* * Find partition number partnum on the given drive. */ -static struct partition_block *find_partition(block_dev_desc_t *dev_desc, int partnum) +static struct partition_block *find_partition(struct blk_desc *dev_desc, + int partnum) { struct rigid_disk_block *rdb; struct partition_block *p; @@ -278,8 +257,7 @@ static struct partition_block *find_partition(block_dev_desc_t *dev_desc, int pa while (block != 0xFFFFFFFF) { - ulong res = dev_desc->block_read(dev_desc->dev, block, 1, - (ulong *)block_buffer); + ulong res = blk_dread(dev_desc, block, 1, (ulong *)block_buffer); if (res == 1) { p = (struct partition_block *)block_buffer; @@ -311,7 +289,8 @@ static struct partition_block *find_partition(block_dev_desc_t *dev_desc, int pa /* * Get info about a partition */ -int get_partition_info_amiga (block_dev_desc_t *dev_desc, int part, disk_partition_t *info) +static int part_get_info_amiga(struct blk_desc *dev_desc, int part, + disk_partition_t *info) { struct partition_block *p = find_partition(dev_desc, part-1); struct amiga_part_geometry *g; @@ -323,7 +302,7 @@ int get_partition_info_amiga (block_dev_desc_t *dev_desc, int part, disk_partiti info->start = g->low_cyl * g->block_per_track * g->surfaces; info->size = (g->high_cyl - g->low_cyl + 1) * g->block_per_track * g->surfaces - 1; info->blksz = rdb.block_bytes; - bcpl_strcpy(info->name, p->drive_name); + bcpl_strcpy((char *)info->name, p->drive_name); disk_type = g->dos_type; @@ -338,7 +317,7 @@ int get_partition_info_amiga (block_dev_desc_t *dev_desc, int part, disk_partiti return 0; } -void print_part_amiga (block_dev_desc_t *dev_desc) +static void part_print_amiga(struct blk_desc *dev_desc) { struct rigid_disk_block *rdb; struct bootcode_block *boot; @@ -349,14 +328,14 @@ void print_part_amiga (block_dev_desc_t *dev_desc) rdb = get_rdisk(dev_desc); if (!rdb) { - PRINTF("print_part_amiga: no rdb found\n"); + PRINTF("part_print_amiga: no rdb found\n"); return; } - PRINTF("print_part_amiga: Scanning partition list\n"); + PRINTF("part_print_amiga: Scanning partition list\n"); block = rdb->partition_list; - PRINTF("print_part_amiga: partition list at 0x%x\n", block); + PRINTF("part_print_amiga: partition list at 0x%x\n", block); printf("Summary: DiskBlockSize: %d\n" " Cylinders : %d\n" @@ -374,8 +353,7 @@ void print_part_amiga (block_dev_desc_t *dev_desc) PRINTF("Trying to load block #0x%X\n", block); - res = dev_desc->block_read(dev_desc->dev, block, 1, - (ulong *)block_buffer); + res = blk_dread(dev_desc, block, 1, (ulong *)block_buffer); if (res == 1) { p = (struct partition_block *)block_buffer; @@ -399,4 +377,13 @@ void print_part_amiga (block_dev_desc_t *dev_desc) } } +U_BOOT_PART_TYPE(amiga) = { + .name = "AMIGA", + .part_type = PART_TYPE_AMIGA, + .max_entries = AMIGA_ENTRY_NUMBERS, + .get_info = part_get_info_amiga, + .print = part_print_amiga, + .test = part_test_amiga, +}; + #endif