6#ifdef BUILDING_USBHDFSD
9#include "usbhd_common.h"
11#include "part_driver.h"
12#ifdef BUILDING_USBHDFSD
15#ifdef BUILDING_IEEE1394_DISK
18#include "fat_driver.h"
22#include "mass_debug.h"
24#define READ_SECTOR(d, a, b) scache_readSector((d)->cache, (a), (void **)&b)
44 unsigned char startST[2];
47 unsigned char endST[2];
48 unsigned char startLBA[4];
49 unsigned char size[4];
53#if defined(BUILDING_USBHDFSD)
55#elif defined(BUILDING_IEEE1394_DISK)
62 rec->start = getUI32(raw->startLBA);
63 rec->count = getUI32(raw->size);
66 if (rec->sid != 0x00) {
69 if ((rec->start == 0) || (rec->start >= dev->maxLBA))
79#if defined(BUILDING_USBHDFSD)
81#elif defined(BUILDING_IEEE1394_DISK)
84static int part_getPartitionTable(
void *dev,
part_table *part)
91 ret = READ_SECTOR(dev, 0, sbuf);
93 XPRINTF(
"part_getPartitionTable read failed %d!\n", ret);
99 printf(
"USBHDFSD: boot signature %X %X\n", sbuf[0x1FE], sbuf[0x1FF]);
100 if (sbuf[0x1FE] == 0x55 && sbuf[0x1FF] == 0xAA) {
103 for (partitions = 0, i = 0; i < 4; i++) {
107 ret = part_getPartitionRecord(dev, part_raw, &part->record[i]);
115 return (partitions == 0 ? 0 : 4);
117 for (i = 0; i < 4; i++) {
118 part->record[i].sid = 0;
125#if defined(BUILDING_USBHDFSD)
127#elif defined(BUILDING_IEEE1394_DISK)
130int part_connect(
void *dev)
135#ifdef BUILDING_USBHDFSD
136 XPRINTF(
"part_connect devId %i \n", dev->devId);
138#ifdef BUILDING_IEEE1394_DISK
139 XPRINTF(
"part_connect devId %i \n", dev->nodeID);
142 if ((parts = part_getPartitionTable(dev, &partTable)) < 0)
146 unsigned int count = 0, i;
147 for (i = 0; i < (
unsigned int)parts; i++) {
149 partTable.record[i].sid == 6 ||
150 partTable.record[i].sid == 4 ||
151 partTable.record[i].sid == 1 ||
152 partTable.record[i].sid == 0x0B ||
153 partTable.record[i].sid == 0x0C ||
154 partTable.record[i].sid == 0x0E)
156 XPRINTF(
"mount partition %d id %02x\n", i, partTable.record[i].sid);
157 if (fat_mount(dev, partTable.record[i].start, partTable.record[i].count) >= 0)
163 printf(
"USBHDFSD: error - no mountable partitions.\n");
167 printf(
"USBHDFSD: mount drive\n");
168 if (fat_mount(dev, 0, dev->maxLBA) < 0)
176#if defined(BUILDING_USBHDFSD)
178#elif defined(BUILDING_IEEE1394_DISK)
181int part_connect(
void *dev)
184#ifdef BUILDING_USBHDFSD
185 printf(
"USBHDFSD: part_disconnect devId %i \n", dev->devId);
187#ifdef BUILDING_IEEE1394_DISK
188 XPRINTF(
"part_disconnect devId %i \n", dev->nodeID);
190 fat_forceUnmount(dev);
u32 count
start sector of fragmented bd/file