From: Christophe Varoqui <christophe.varoqui@gmail.com>
To: device-mapper development <dm-devel@redhat.com>
Subject: Re: [PATCH] Add PS3 HDD partition table support
Date: Wed, 20 Feb 2013 07:28:19 +0100 [thread overview]
Message-ID: <1361341699.3217.4.camel@lapoo.opensvc.com> (raw)
In-Reply-To: <511F8115.5000501@mail.ru>
On sam., 2013-02-16 at 13:52 +0100, Phileas Fogg wrote:
> Hi,
>
> i would like to submit a patch which adds the PS3 HDD partition table support to
> kpartx.
>
Hi,
Would you be so kind as to rebase this patch for inclusion ?
As I have no way to test it, so if someone can sign it off, all the
better.
Best regards,
Christophe Varoqui
www.opensvc.com
> --- a/kpartx/Makefile 2012-09-07 00:15:06.163999993 -0800
> +++ b/kpartx/Makefile 2012-09-07 00:15:25.935999993 -0800
> @@ -14,7 +14,7 @@
>
> LDFLAGS = -ldevmapper
> OBJS = bsd.o dos.o kpartx.o solaris.o unixware.o dasd.o sun.o \
> - gpt.o mac.o crc32.o lopart.o xstrncpy.o devmapper.o
> + gpt.o mac.o ps3.o crc32.o lopart.o xstrncpy.o devmapper.o
> EXEC = kpartx
>
> all: $(EXEC)
> --- a/kpartx/byteorder.h 2012-09-07 00:30:30.679999971 -0800
> +++ b/kpartx/byteorder.h 2012-09-07 00:31:08.075999971 -0800
> @@ -12,12 +12,16 @@
> # define le16_to_cpu(x) (x)
> # define be16_to_cpu(x) bswap_16(x)
> # define le32_to_cpu(x) (x)
> +# define le64_to_cpu(x) (x)
> # define be32_to_cpu(x) bswap_32(x)
> +# define be64_to_cpu(x) bswap_64(x)
> #elif BYTE_ORDER == BIG_ENDIAN
> # define le16_to_cpu(x) bswap_16(x)
> # define be16_to_cpu(x) (x)
> # define le32_to_cpu(x) bswap_32(x)
> +# define le64_to_cpu(x) bswap_64(x)
> # define be32_to_cpu(x) (x)
> +# define be64_to_cpu(x) (x)
> #else
> # error unsupported
> #endif
> --- a/kpartx/kpartx.h 2012-09-07 00:17:56.503999989 -0800
> +++ b/kpartx/kpartx.h 2012-09-07 00:18:08.495999989 -0800
> @@ -39,6 +39,7 @@
> extern ptreader read_dasd_pt;
> extern ptreader read_mac_pt;
> extern ptreader read_sun_pt;
> +extern ptreader read_ps3_pt;
>
> char *getblock(int fd, unsigned int secnr);
>
> --- a/kpartx/kpartx.c 2012-09-07 00:15:37.567999993 -0800
> +++ b/kpartx/kpartx.c 2012-09-07 00:16:05.635999993 -0800
> @@ -80,6 +80,7 @@
> addpts("dasd", read_dasd_pt);
> addpts("mac", read_mac_pt);
> addpts("sun", read_sun_pt);
> + addpts("ps3", read_ps3_pt);
> }
>
> static char short_opts[] = "rladfgvp:t:su";
> --- /dev/null 2012-09-07 00:07:55.900000003 -0800
> +++ b/kpartx/ps3.c 2012-09-07 00:29:52.987999973 -0800
> @@ -0,0 +1,72 @@
> +#include "kpartx.h"
> +#include "byteorder.h"
> +#include <sys/types.h>
> +#include <string.h>
> +
> +#define SECTOR_SIZE 512
> +#define MAX_ACL_ENTRIES 8
> +#define MAX_PARTITIONS 8
> +
> +#define MAGIC1 0x0FACE0FFULL
> +#define MAGIC2 0xDEADFACEULL
> +
> +struct p_acl_entry {
> + u_int64_t laid;
> + u_int64_t rights;
> +};
> +
> +struct d_partition {
> + u_int64_t p_start;
> + u_int64_t p_size;
> + struct p_acl_entry p_acl[MAX_ACL_ENTRIES];
> +};
> +
> +struct disklabel {
> + u_int8_t d_res1[16];
> + u_int64_t d_magic1;
> + u_int64_t d_magic2;
> + u_int64_t d_res2;
> + u_int64_t d_res3;
> + struct d_partition d_partitions[MAX_PARTITIONS];
> + u_int8_t d_pad[0x600 - MAX_PARTITIONS * sizeof(struct d_partition)- 0x30];
> +};
> +
> +static int
> +read_disklabel(int fd, struct disklabel *label) {
> + unsigned char *data;
> + int i;
> +
> + for (i = 0; i < sizeof(struct disklabel) / SECTOR_SIZE; i++) {
> + data = (unsigned char *) getblock(fd, i);
> + if (!data)
> + return 0;
> +
> + memcpy((unsigned char *) label + i * SECTOR_SIZE, data, SECTOR_SIZE);
> + }
> +
> + return 1;
> +}
> +
> +int
> +read_ps3_pt(int fd, struct slice all, struct slice *sp, int ns) {
> + struct disklabel label;
> + int n = 0;
> + int i;
> +
> + if (!read_disklabel(fd, &label))
> + return -1;
> +
> + if ((be64_to_cpu(label.d_magic1) != MAGIC1) ||
> + (be64_to_cpu(label.d_magic2) != MAGIC2))
> + return -1;
> +
> + for (i = 0; i < MAX_PARTITIONS; i++) {
> + if (label.d_partitions[i].p_start && label.d_partitions[i].p_size) {
> + sp[n].start = be64_to_cpu(label.d_partitions[i].p_start);
> + sp[n].size = be64_to_cpu(label.d_partitions[i].p_size);
> + n++;
> + }
> + }
> +
> + return n;
> +}
>
> --
> dm-devel mailing list
> dm-devel@redhat.com
> https://www.redhat.com/mailman/listinfo/dm-devel
next prev parent reply other threads:[~2013-02-20 6:28 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-02-16 12:52 [PATCH] Add PS3 HDD partition table support Phileas Fogg
2013-02-20 6:28 ` Christophe Varoqui [this message]
2013-02-20 17:47 ` Phileas Fogg
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1361341699.3217.4.camel@lapoo.opensvc.com \
--to=christophe.varoqui@gmail.com \
--cc=christophe.varoqui@opensvc.com \
--cc=dm-devel@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.