Users can now set the access flags in the region struct. This is
required for accessing the first region, or selecting an alternative
decryption key for the vflash partitions.

Signed-off-by: Andre Heider <a.hei...@gmail.com>
---
 arch/powerpc/include/asm/ps3stor.h       |    8 +++++++-
 arch/powerpc/platforms/ps3/device-init.c |    1 +
 drivers/block/ps3disk.c                  |    5 +++--
 drivers/ps3/ps3stor_lib.c                |    5 +++--
 4 files changed, 14 insertions(+), 5 deletions(-)

diff --git a/arch/powerpc/include/asm/ps3stor.h 
b/arch/powerpc/include/asm/ps3stor.h
index 9871c05..f29aa37 100644
--- a/arch/powerpc/include/asm/ps3stor.h
+++ b/arch/powerpc/include/asm/ps3stor.h
@@ -25,12 +25,18 @@
 
 #include <asm/ps3.h>
 
-#define PS3_STORAGE_MAX_REGIONS                (8)
+#define PS3_STORAGE_MAX_REGIONS                        (8)
+
+#define PS3_STORAGE_FLAG_DEFAULT               (0)
+#define PS3_STORAGE_FLAG_SKIP_ACL              (1 << 1)
+#define PS3_STORAGE_FLAG_ALT_KEY               (1 << 2)
+#define PS3_STORAGE_FLAG_UNENCRYPTED   (1 << 5)
 
 struct ps3_storage_region {
        unsigned int id;
        u64 start;
        u64 size;
+       u64 flags;
 };
 
 struct ps3_storage_device {
diff --git a/arch/powerpc/platforms/ps3/device-init.c 
b/arch/powerpc/platforms/ps3/device-init.c
index 830d741..7a3dbf8 100644
--- a/arch/powerpc/platforms/ps3/device-init.c
+++ b/arch/powerpc/platforms/ps3/device-init.c
@@ -409,6 +409,7 @@ static int ps3_setup_storage_dev(const struct 
ps3_repository_device *repo,
                p->regions[i].id = id;
                p->regions[i].start = start;
                p->regions[i].size = size;
+               p->regions[i].flags = PS3_STORAGE_FLAG_DEFAULT;
        }
 
        result = ps3_system_bus_device_register(&p->sbd);
diff --git a/drivers/block/ps3disk.c b/drivers/block/ps3disk.c
index cba8b45..30dae10 100644
--- a/drivers/block/ps3disk.c
+++ b/drivers/block/ps3disk.c
@@ -130,6 +130,7 @@ static int ps3disk_submit_request_sg(struct 
ps3_storage_device *dev,
        unsigned int region_idx = MINOR(disk_devt(req->rq_disk)) &
                                  (PS3DISK_MINORS - 1);
        unsigned int region_id = dev->regions[region_idx].id;
+       u64 flags = dev->regions[region_idx].flags;
 
 #ifdef DEBUG
        unsigned int n = 0;
@@ -152,11 +153,11 @@ static int ps3disk_submit_request_sg(struct 
ps3_storage_device *dev,
                ps3disk_scatter_gather(dev, req, 1);
 
                res = lv1_storage_write(dev->sbd.dev_id, region_id,
-                                       start_sector, sectors, 0,
+                                       start_sector, sectors, flags,
                                        dev->bounce_lpar, &dev->tag);
        } else {
                res = lv1_storage_read(dev->sbd.dev_id, region_id,
-                                      start_sector, sectors, 0,
+                                      start_sector, sectors, flags,
                                       dev->bounce_lpar, &dev->tag);
        }
        if (res) {
diff --git a/drivers/ps3/ps3stor_lib.c b/drivers/ps3/ps3stor_lib.c
index 5bbc023..8bb54ac 100644
--- a/drivers/ps3/ps3stor_lib.c
+++ b/drivers/ps3/ps3stor_lib.c
@@ -275,6 +275,7 @@ u64 ps3stor_read_write_sectors(struct ps3_storage_device 
*dev,
                               u64 start_sector, u64 sectors, int write)
 {
        unsigned int region_id = dev->regions[region_idx].id;
+       u64 flags = dev->regions[region_idx].flags;
        const char *op = write ? "write" : "read";
        int res;
 
@@ -283,10 +284,10 @@ u64 ps3stor_read_write_sectors(struct ps3_storage_device 
*dev,
 
        init_completion(&dev->done);
        res = write ? lv1_storage_write(dev->sbd.dev_id, region_id,
-                                       start_sector, sectors, 0, lpar,
+                                       start_sector, sectors, flags, lpar,
                                        &dev->tag)
                    : lv1_storage_read(dev->sbd.dev_id, region_id,
-                                      start_sector, sectors, 0, lpar,
+                                      start_sector, sectors, flags, lpar,
                                       &dev->tag);
        if (res) {
                dev_dbg(&dev->sbd.core, "%s:%u: %s failed %d\n", __func__,
-- 
1.7.5.4

_______________________________________________
Linuxppc-dev mailing list
Linuxppc-dev@lists.ozlabs.org
https://lists.ozlabs.org/listinfo/linuxppc-dev

Reply via email to