Lines Matching +full:partitions +full:- +full:table +full:- +full:offset

1 /*-
45 struct ptable *table; member
57 /* Convert size to a human-readable number. */
81 ptblread(void *d, void *buf, size_t blocks, uint64_t offset) in ptblread() argument
87 od = (struct open_disk *)dev->dd.d_opendata; in ptblread()
90 * The strategy function assumes the offset is in units of 512 byte in ptblread()
91 * sectors. For larger sector sizes, we need to adjust the offset to in ptblread()
94 offset *= (od->sectorsize / 512); in ptblread()
99 return (dev->dd.d_dev->dv_strategy(dev, F_READ | F_NORA, offset, in ptblread()
100 blocks * od->sectorsize, (char *)buf, NULL)); in ptblread()
109 struct ptable *table; in ptable_print() local
116 od = (struct open_disk *)pa->dev->dd.d_opendata; in ptable_print()
117 sectsize = od->sectorsize; in ptable_print()
118 partsize = part->end - part->start + 1; in ptable_print()
119 snprintf(line, sizeof(line), " %s%s: %s", pa->prefix, pname, in ptable_print()
120 parttype2str(part->type)); in ptable_print()
124 if (pa->verbose) { in ptable_print()
138 if (part->type == PART_FREEBSD) { in ptable_print()
140 dev.dd.d_dev = pa->dev->dd.d_dev; in ptable_print()
141 dev.dd.d_unit = pa->dev->dd.d_unit; in ptable_print()
142 dev.d_slice = part->index; in ptable_print()
145 table = ptable_open(&dev, partsize, sectsize, ptblread); in ptable_print()
146 if (table != NULL) { in ptable_print()
148 pa->prefix, pname); in ptable_print()
149 bsd.dev = pa->dev; in ptable_print()
151 bsd.verbose = pa->verbose; in ptable_print()
152 res = ptable_iterate(table, &bsd, ptable_print); in ptable_print()
153 ptable_close(table); in ptable_print()
169 od = (struct open_disk *)dev->dd.d_opendata; in disk_print()
173 return (ptable_iterate(od->table, &pa, ptable_print)); in disk_print()
177 disk_read(struct disk_devdesc *dev, void *buf, uint64_t offset, u_int blocks) in disk_read() argument
182 od = (struct open_disk *)dev->dd.d_opendata; in disk_read()
183 ret = dev->dd.d_dev->dv_strategy(dev, F_READ, dev->d_offset + offset, in disk_read()
184 blocks * od->sectorsize, buf, NULL); in disk_read()
190 disk_write(struct disk_devdesc *dev, void *buf, uint64_t offset, u_int blocks) in disk_write() argument
195 od = (struct open_disk *)dev->dd.d_opendata; in disk_write()
196 ret = dev->dd.d_dev->dv_strategy(dev, F_WRITE, dev->d_offset + offset, in disk_write()
197 blocks * od->sectorsize, buf, NULL); in disk_write()
205 struct open_disk *od = dev->dd.d_opendata; in disk_ioctl()
212 *(u_int *)data = od->sectorsize; in disk_ioctl()
215 if (dev->d_offset == 0) in disk_ioctl()
216 *(uint64_t *)data = od->mediasize; in disk_ioctl()
218 *(uint64_t *)data = od->entrysize * od->sectorsize; in disk_ioctl()
232 struct ptable *table; in disk_open() local
246 dev->dd.d_opendata = od; in disk_open()
247 od->entrysize = 0; in disk_open()
248 od->mediasize = mediasize; in disk_open()
249 od->sectorsize = sectorsize; in disk_open()
259 dev->d_offset = 0; in disk_open()
260 table = NULL; in disk_open()
261 slice = dev->d_slice; in disk_open()
262 partition = dev->d_partition; in disk_open()
265 dev->dd.d_unit, dev->d_slice, dev->d_partition, od); in disk_open()
268 od->table = ptable_open(&partdev, mediasize / sectorsize, sectorsize, in disk_open()
270 if (od->table == NULL) { in disk_open()
271 DPRINTF("Can't read partition table"); in disk_open()
276 if (ptable_getsize(od->table, &mediasize) != 0) { in disk_open()
280 od->mediasize = mediasize; in disk_open()
282 if (ptable_gettype(od->table) == PTABLE_BSD && in disk_open()
285 rc = ptable_getpart(od->table, &part, partition); in disk_open()
287 dev->d_offset = part.start; in disk_open()
288 od->entrysize = part.end - part.start + 1; in disk_open()
290 } else if (ptable_gettype(od->table) == PTABLE_ISO9660) { in disk_open()
291 dev->d_offset = 0; in disk_open()
292 od->entrysize = mediasize; in disk_open()
296 rc = ptable_getbestpart(od->table, &part); in disk_open()
298 rc = ptable_getpart(od->table, &part, slice); in disk_open()
301 dev->d_offset = part.start; in disk_open()
302 od->entrysize = part.end - part.start + 1; in disk_open()
304 if (ptable_gettype(od->table) == PTABLE_GPT) { in disk_open()
310 * table isn't GPT, reset partition value to in disk_open()
332 table = ptable_open(dev, part.end - part.start + 1, in disk_open()
333 od->sectorsize, ptblread); in disk_open()
334 if (table == NULL) { in disk_open()
345 if (ptable_gettype(table) != PTABLE_BSD) in disk_open()
349 rc = ptable_getpart(table, &part, partition); in disk_open()
352 dev->d_offset += part.start; in disk_open()
353 od->entrysize = part.end - part.start + 1; in disk_open()
356 if (table != NULL) in disk_open()
357 ptable_close(table); in disk_open()
360 if (od->table != NULL) in disk_open()
361 ptable_close(od->table); in disk_open()
366 dev->d_slice = slice; in disk_open()
367 dev->d_partition = partition; in disk_open()
368 DPRINTF("%s offset %lld => %p", disk_fmtdev(dev), in disk_open()
369 (long long)dev->d_offset, od); in disk_open()
379 od = (struct open_disk *)dev->dd.d_opendata; in disk_close()
381 ptable_close(od->table); in disk_close()
393 assert(vdev->d_dev->dv_type == DEVT_DISK); in disk_fmtdev()
394 cp = buf + sprintf(buf, "%s%d", dev->dd.d_dev->dv_name, dev->dd.d_unit); in disk_fmtdev()
395 if (dev->d_slice > D_SLICENONE) { in disk_fmtdev()
397 if (dev->d_partition == D_PARTISGPT) { in disk_fmtdev()
398 sprintf(cp, "p%d:", dev->d_slice); in disk_fmtdev()
403 cp += sprintf(cp, "s%d", dev->d_slice); in disk_fmtdev()
406 if (dev->d_partition > D_PARTNONE) in disk_fmtdev()
407 cp += sprintf(cp, "%c", dev->d_partition + 'a'); in disk_fmtdev()
421 unit = -1; in disk_parsedev()
446 /* we don't support nested partitions on GPT */ in disk_parsedev()
461 partition = *cp - 'a'; in disk_parsedev()
474 dev->dd.d_unit = unit; in disk_parsedev()
475 dev->d_slice = slice; in disk_parsedev()
476 dev->d_partition = partition; in disk_parsedev()
477 *idev = &dev->dd; in disk_parsedev()