karef/metrobox/xpedite1k: fix eth_setenv_enetaddr typos
[platform/kernel/u-boot.git] / api_examples / demo.c
index 7ccdb51..df9c4bd 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * (C) Copyright 2007 Semihalf
+ * (C) Copyright 2007-2008 Semihalf
  *
  * Written by: Rafal Jaworowski <raj@semihalf.com>
  *
 
 #define errf(fmt, args...) do { printf("ERROR @ %s(): ", __func__); printf(fmt, ##args); } while (0)
 
-void   test_dump_si(struct sys_info *);
+#define BUF_SZ         2048
+#define WAIT_SECS      5
+
+void   test_dump_buf(void *, int);
 void   test_dump_di(int);
+void   test_dump_si(struct sys_info *);
 void   test_dump_sig(struct api_signature *);
 
-char buf[2048];
-
-#define WAIT_SECS 5
+static char buf[BUF_SZ];
 
 int main(int argc, char *argv[])
 {
-       int rv = 0;
-       int h, i, j;
-       int devs_no;
+       int rv = 0, h, i, j, devs_no;
        struct api_signature *sig = NULL;
        ulong start, now;
        struct device_info *di;
+       lbasize_t rlen;
 
        if (!api_search_sig(&sig))
                return -1;
@@ -94,7 +95,6 @@ int main(int argc, char *argv[])
        if (devs_no == 0)
                return -1;
 
-
        printf("\n*** Show devices ***\n");
        for (i = 0; i < devs_no; i++) {
                test_dump_di(i);
@@ -126,10 +126,17 @@ int main(int argc, char *argv[])
        if (i == devs_no)
                printf("No storage devices available\n");
        else {
+               memset(buf, 0, BUF_SZ);
+
                if ((rv = ub_dev_open(i)) != 0)
                        errf("open device %d error %d\n", i, rv);
-               else if ((rv = ub_dev_read(i, &buf, 200, 20)) != 0)
+
+               else if ((rv = ub_dev_read(i, buf, 1, 0, &rlen)) != 0)
                        errf("could not read from device %d, error %d\n", i, rv);
+               else {
+                       printf("Sector 0 dump (512B):\n");
+                       test_dump_buf(buf, 512);
+               }
 
                ub_dev_close(i);
        }
@@ -170,6 +177,7 @@ int main(int argc, char *argv[])
                printf("%s = %s\n", env, ub_env_get(env));
 
        /* reset */
+       printf("\n*** Resetting board ***\n");
        ub_reset();
        printf("\nHmm, reset returned...?!\n");
 
@@ -218,23 +226,56 @@ void test_dump_si(struct sys_info *si)
        }
 }
 
-static char * test_stor_typ(int type)
+static char *test_stor_typ(int type)
 {
        if (type & DT_STOR_IDE)
                return "IDE";
 
+       if (type & DT_STOR_MMC)
+               return "MMC";
+
+       if (type & DT_STOR_SATA)
+               return "SATA";
+
        if (type & DT_STOR_SCSI)
                return "SCSI";
 
        if (type & DT_STOR_USB)
                return "USB";
 
-       if (type & DT_STOR_MMC);
-               return "MMC";
-
        return "Unknown";
 }
 
+void test_dump_buf(void *buf, int len)
+{
+       int i;
+       int line_counter = 0;
+       int sep_flag = 0;
+       int addr = 0;
+
+       printf("%07x:\t", addr);
+
+       for (i = 0; i < len; i++) {
+               if (line_counter++ > 15) {
+                       line_counter = 0;
+                       sep_flag = 0;
+                       addr += 16;
+                       i--;
+                       printf("\n%07x:\t", addr);
+                       continue;
+               }
+
+               if (sep_flag++ > 1) {
+                       sep_flag = 1;
+                       printf(" ");
+               }
+
+               printf("%02x", *((char *)buf++));
+       }
+
+       printf("\n");
+}
+
 void test_dump_di(int handle)
 {
        int i;