6#ifdef BUILDING_USBHDFSD
11#include "part_driver.h"
12#ifdef BUILDING_USBHDFSD
15#ifdef BUILDING_IEEE1394_DISK
24#define READ_SECTOR(d, a, b) scache_readSector((d)->cache, (a), (void **)&b)
37 part_record record[4];
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)
54static USBHD_INLINE
int part_getPartitionRecord(mass_dev *dev, part_raw_record *raw, part_record *rec)
55#elif defined(BUILDING_IEEE1394_DISK)
56static USBHD_INLINE
int part_getPartitionRecord(
struct SBP2Device *dev, part_raw_record *raw, part_record *rec)
58static USBHD_INLINE
int part_getPartitionRecord(
void *dev, part_raw_record *raw, part_record *rec)
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)
80static int part_getPartitionTable(mass_dev *dev, part_table *part)
81#elif defined(BUILDING_IEEE1394_DISK)
82static int part_getPartitionTable(
struct SBP2Device *dev, part_table *part)
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++) {
104 part_raw_record *part_raw;
106 part_raw = (part_raw_record *)(sbuf + 0x01BE + (i * 16));
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)
126int part_connect(mass_dev *dev)
127#elif defined(BUILDING_IEEE1394_DISK)
130int part_connect(
void *dev)
133 part_table partTable;
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)
177void part_disconnect(mass_dev *dev)
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