ui/ncurses: clear DNS server setting before appending new servers
[petitboot] / ui / common / ps3.c
index 9f575e795d5b850f2c6c7f40279855f27aa5233f..c9b97b5d2ca9da734b8b934c5113cc7c5ae59e18 100644 (file)
@@ -16,7 +16,9 @@
  *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  */
 
-#define _GNU_SOURCE
+#if defined(HAVE_CONFIG_H)
+#include "config.h"
+#endif
 
 #include <assert.h>
 #include <errno.h>
@@ -28,7 +30,7 @@
 #include <ps3-av.h>
 
 #include "log/log.h"
-#include "pb-system.h"
+#include "ui-system.h"
 #include "ps3.h"
 
 static const char flash_dev[] = "/dev/ps3flash";
@@ -49,6 +51,11 @@ static const struct os_area_db_id id_flags =
        .owner = OS_AREA_DB_OWNER_PETITBOOT, /* 3 */
        .key = 3,
 };
+static const struct os_area_db_id id_timeout =
+{
+       .owner = OS_AREA_DB_OWNER_PETITBOOT, /* 3 */
+       .key = 4,
+};
 
 struct ps3_flash_ctx {
        FILE *dev;
@@ -59,6 +66,8 @@ struct ps3_flash_ctx {
 
 static void ps3_flash_close(struct ps3_flash_ctx *fc)
 {
+       assert(fc->dev);
+
        fclose(fc->dev);
        fc->dev = NULL;
 }
@@ -80,7 +89,7 @@ static int ps3_flash_open(struct ps3_flash_ctx *fc, const char *mode)
        result = os_area_fixed_read(&fc->header, &fc->params, fc->dev);
 
        if (result) {
-               pb_log("%s: os_area_fixed_read failed: %s\n", __func__);
+               pb_log("%s: os_area_fixed_read failed\n", __func__);
                goto fail;
        }
 
@@ -104,15 +113,15 @@ int ps3_flash_get_values(struct ps3_flash_values *values)
        struct ps3_flash_ctx fc;
        uint64_t tmp;
 
-       memset(values, 0, sizeof(*values));
-
        result = ps3_flash_open(&fc, "r");
 
        if (result)
-               return -1;
+               goto fail;
 
        result = os_area_db_read(&fc.db, &fc.header, fc.dev);
 
+       ps3_flash_close(&fc);
+
        if (result) {
                pb_log("%s: os_area_db_read failed: %s\n", __func__,
                        strerror(errno));
@@ -124,21 +133,24 @@ int ps3_flash_get_values(struct ps3_flash_values *values)
        if (!result)
                values->default_item = (uint32_t)tmp;
 
-       sum += result = os_area_db_get(&fc.db, &id_video_mode, &tmp);
+       result = os_area_db_get(&fc.db, &id_timeout, &tmp);
 
        if (!result)
-               values->video_mode = (uint16_t)tmp;
-
+               values->timeout = (uint8_t)tmp;
 
-       pb_log("%s: default_item: %u\n", __func__, values->default_item);
-       pb_log("%s: video_mode:   %u\n", __func__, values->video_mode);
+       sum += result = os_area_db_get(&fc.db, &id_video_mode, &tmp);
 
-       ps3_flash_close(&fc);
-       return !!sum;
+       if (!result)
+               values->video_mode = (uint16_t)tmp;
 
+       pb_debug("%s: default_item: %x\n", __func__,
+               (unsigned int)values->default_item);
+       pb_debug("%s: timeout: %u\n", __func__,
+               (unsigned int)values->timeout);
+       pb_debug("%s: video_mode:   %u\n", __func__,
+               (unsigned int)values->video_mode);
 fail:
-       ps3_flash_close(&fc);
-       return -1;
+       return (result || sum) ? -1 : 0;
 }
 
 /**
@@ -153,8 +165,8 @@ int ps3_flash_set_values(const struct ps3_flash_values *values)
        int result;
        struct ps3_flash_ctx fc;
 
-       pb_log("%s: default_item: %u\n", __func__, values->default_item);
-       pb_log("%s: video_mode:   %u\n", __func__, values->video_mode);
+       pb_debug("%s: default_item: %u\n", __func__, values->default_item);
+       pb_debug("%s: video_mode:   %u\n", __func__, values->video_mode);
 
        result = ps3_flash_open(&fc, "r+");
 
@@ -177,6 +189,8 @@ int ps3_flash_set_values(const struct ps3_flash_values *values)
                }
        }
 
+       /* timeout is currently read-only, set with ps3-bl-option */
+
        result = os_area_db_set_32(&fc.db, &id_default_item,
                values->default_item);
        result += os_area_db_set_16(&fc.db, &id_video_mode,
@@ -233,7 +247,7 @@ static int ps3_video_ioctl(int request, unsigned int *mode_id)
 
 int ps3_set_video_mode(unsigned int mode_id)
 {
-       pb_log("%s: %u\n", __func__, mode_id);
+       pb_debug("%s: %u\n", __func__, mode_id);
        return ps3_video_ioctl(PS3FB_IOCTL_SETMODE, &mode_id);
 }