Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/sys/arch/sandpoint/stand/altboot - add "ll" modifier to printf.



details:   https://anonhg.NetBSD.org/src/rev/9259bebffd14
branches:  trunk
changeset: 761292:9259bebffd14
user:      nisimura <nisimura%NetBSD.org@localhost>
date:      Sun Jan 23 01:32:08 2011 +0000

description:
- add "ll" modifier to printf.
- be more conscious about int type propagation.
- add missing version and newvers.sh

diffstat:

 sys/arch/sandpoint/stand/altboot/dsk.c      |  23 +++---
 sys/arch/sandpoint/stand/altboot/globals.h  |   4 +-
 sys/arch/sandpoint/stand/altboot/newvers.sh |  16 ++++
 sys/arch/sandpoint/stand/altboot/printf.c   |  93 ++++++++++++++++------------
 sys/arch/sandpoint/stand/altboot/version    |   7 ++
 5 files changed, 88 insertions(+), 55 deletions(-)

diffs (294 lines):

diff -r fb1a476f0bd2 -r 9259bebffd14 sys/arch/sandpoint/stand/altboot/dsk.c
--- a/sys/arch/sandpoint/stand/altboot/dsk.c    Sun Jan 23 01:05:29 2011 +0000
+++ b/sys/arch/sandpoint/stand/altboot/dsk.c    Sun Jan 23 01:32:08 2011 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: dsk.c,v 1.1 2011/01/23 01:05:30 nisimura Exp $ */
+/* $NetBSD: dsk.c,v 1.2 2011/01/23 01:32:08 nisimura Exp $ */
 
 /*-
  * Copyright (c) 2010 The NetBSD Foundation, Inc.
@@ -82,9 +82,9 @@
 static char *mkident(char *, int);
 static void set_xfermode(struct dkdev_ata *, int);
 static void decode_dlabel(struct disk *, char *);
-static int lba_read(struct disk *, uint64_t, uint32_t, void *);
-static void issue48(struct dvata_chan *, uint64_t, uint32_t);
-static void issue28(struct dvata_chan *, uint64_t, uint32_t);
+static int lba_read(struct disk *, int64_t, int, void *);
+static void issue48(struct dvata_chan *, int64_t, int);
+static void issue28(struct dvata_chan *, int64_t, int);
 static struct disk *lookup_disk(int);
 
 static struct disk ldisk[4];
@@ -368,11 +368,11 @@
 }
 
 static int
-lba_read(struct disk *d, uint64_t bno, uint32_t bcnt, void *buf)
+lba_read(struct disk *d, int64_t bno, int bcnt, void *buf)
 {
        struct dkdev_ata *l;
        struct dvata_chan *chan;
-       void (*issue)(struct dvata_chan *, uint64_t, uint32_t);
+       void (*issue)(struct dvata_chan *, int64_t, int);
        int n, rdcnt, i, k;
        uint16_t *p;
        const char *err;
@@ -389,8 +389,7 @@
                (*issue)(chan, bno, rdcnt);
                for (k = 0; k < rdcnt; k++) {
                        if (spinwait_unbusy(l, n, 1000, &err) == 0) {
-                               printf("%s blk %d %s\n",
-                                  d->xname, (int)bno, err);
+                               printf("%s blk %lld %s\n", d->xname, bno, err);
                                error = EIO;
                                break;
                        }
@@ -406,7 +405,7 @@
 }
 
 static void
-issue48(struct dvata_chan *chan, uint64_t bno, uint32_t nblk)
+issue48(struct dvata_chan *chan, int64_t bno, int nblk)
 {
 
        CSR_WRITE_1(chan->cmd + _NSECT, 0); /* always less than 256 */
@@ -422,7 +421,7 @@
 }
 
 static void
-issue28(struct dvata_chan *chan, uint64_t bno, uint32_t nblk)
+issue28(struct dvata_chan *chan, int64_t bno, int nblk)
 {
 
        CSR_WRITE_1(chan->cmd + _NSECT, nblk);
@@ -511,10 +510,10 @@
 {
        struct disk *d = devdata;
        struct disklabel *dlp;
-       uint64_t bno;
+       int64_t bno;
 
 #if 0
-printf("%s %d %d\n", d->xname, (int)dblk, size);
+printf("%s %lld %d\n", d->xname, dblk, size);
 #endif
        if (size == 0)
                return 0;
diff -r fb1a476f0bd2 -r 9259bebffd14 sys/arch/sandpoint/stand/altboot/globals.h
--- a/sys/arch/sandpoint/stand/altboot/globals.h        Sun Jan 23 01:05:29 2011 +0000
+++ b/sys/arch/sandpoint/stand/altboot/globals.h        Sun Jan 23 01:32:08 2011 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: globals.h,v 1.1 2011/01/23 01:05:30 nisimura Exp $ */
+/* $NetBSD: globals.h,v 1.2 2011/01/23 01:32:08 nisimura Exp $ */
 
 /* clock feed */
 #ifndef EXT_CLK_FREQ
@@ -186,7 +186,7 @@
        void *dlabel;
        int part;
        void *fsops;
-       int (*lba_read)(struct disk *, uint64_t, uint32_t, void *);
+       int (*lba_read)(struct disk *, int64_t, int, void *);
 };
 
 int spinwait_unbusy(struct dkdev_ata *, int, int, const char **);
diff -r fb1a476f0bd2 -r 9259bebffd14 sys/arch/sandpoint/stand/altboot/newvers.sh
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/sys/arch/sandpoint/stand/altboot/newvers.sh       Sun Jan 23 01:32:08 2011 +0000
@@ -0,0 +1,16 @@
+#
+# Usage: newvers.sh <historyrecord>
+#
+while read vers comment
+do
+       version=$vers
+done < $1
+developer=${USER:-"releng"}
+[ -f /bin/hostname ] && buildhost=@`/bin/hostname`
+date=`date`
+
+cat <<EoF >vers.c
+const char bootprog_rev[] = "$version";
+const char bootprog_date[] = "$date";
+const char bootprog_maker[] = "$developer$buildhost";
+EoF
diff -r fb1a476f0bd2 -r 9259bebffd14 sys/arch/sandpoint/stand/altboot/printf.c
--- a/sys/arch/sandpoint/stand/altboot/printf.c Sun Jan 23 01:05:29 2011 +0000
+++ b/sys/arch/sandpoint/stand/altboot/printf.c Sun Jan 23 01:32:08 2011 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: printf.c,v 1.1 2011/01/23 01:05:30 nisimura Exp $ */
+/* $NetBSD: printf.c,v 1.2 2011/01/23 01:32:08 nisimura Exp $ */
 
 /*-
  * Copyright (c) 2007 The NetBSD Foundation, Inc.
@@ -40,7 +40,7 @@
 #define MAXSTR 80
 
 static int _doprnt(void (*)(int), const char *, va_list);
-static void pr_int(unsigned long, int, char *);
+static void mkdigit(unsigned long long, int, char *);
 static void sputchar(int);
 
 static char *sbuf, *ebuf;
@@ -89,22 +89,14 @@
 }
 
 static int
-_doprnt(func, fmt, ap)
-       void (*func)(int);      /* Function to put a character */
-       const char *fmt;        /* Format string for pr_int/pr_float */
-       va_list ap;             /* Arguments to pr_int/pr_float */
+_doprnt(void (*func)(int), const char *fmt, va_list ap)
 {
-       int i;
-       char *str;
-       char string[20];
-       int length;
-       int leftjust;
-       int longflag;
-       int fmax, fmin;
-       int leading;
-       int outcnt;
-       char fill;
-       char sign;
+       int i, outcnt;
+       char buf[23], *str; /* requires 23 digits in octal at most */
+       int length, fmax, fmin, leading;
+       int leftjust, llflag;
+       char fill, sign;
+       long long v;
 
        outcnt = 0;
        while ((i = *fmt++) != '\0') {
@@ -141,15 +133,17 @@
                                        fmax = fmax * 10 + *fmt++ - '0';
                        }
                }
-               longflag = (*fmt == 'l');
-               if (longflag)
-                       fmt++;
+               llflag = 0;
+               if (*fmt == 'l' && *++fmt == 'l') {
+                       llflag = 1;
+                       fmt += 1;
+               }
                if ((i = *fmt++) == '\0') {
                        (*func)('%');
                        outcnt += 1;
                        break;
                }
-               str = string;
+               str = buf;
                sign = ' ';
                switch (i) {
                case 'c':
@@ -165,36 +159,52 @@
                        break;
 
                case 'd':
-                     {
-                       long l = va_arg(ap, long);
-                       if (l < 0) { sign = '-' ; l = -l; }
-                       pr_int((unsigned long)l, 10, str);
-                     }
+                       if (llflag)
+                               v = va_arg(ap, long long);
+                       else
+                               v = va_arg(ap, int);
+                       if (v < 0) {
+                               sign = '-' ; v = -v;
+                       }
+                       mkdigit((unsigned long long)v, 10, str);
                        break;
 
                case 'u':
-                       pr_int(va_arg(ap, unsigned long), 10, str);
+                       if (llflag)
+                               v = va_arg(ap, long long);
+                       else
+                               v = va_arg(ap, int);
+                       mkdigit((unsigned long long)v, 10, str);
                        break;
 
                case 'o':
-                       pr_int(va_arg(ap, unsigned long), 8, str);
+                       if (llflag)
+                               v = va_arg(ap, long long);
+                       else
+                               v = va_arg(ap, int);
+                       mkdigit((unsigned long long)v, 8, str);
                        fmax = 0;
                        break;
 
                case 'X':
                case 'x':
-                       pr_int(va_arg(ap, unsigned long), 16, str);
+                       if (llflag)
+                               v = va_arg(ap, long long);
+                       else
+                               v = va_arg(ap, int);
+                       mkdigit((unsigned long long)v, 16, str);
                        fmax = 0;
                        break;
 
                case 'p':
-                       pr_int(va_arg(ap, unsigned long), 16, str);
+                       mkdigit(va_arg(ap, unsigned int), 16, str);
                        fill = '0';
                        fmin = 8;
                        fmax = 0;
                        (*func)('0'); (*func)('x');
                        outcnt += 2;
                        break;
+
                default:
                        (*func)(i);
                        break;
@@ -232,23 +242,24 @@
        return outcnt;
 }
 
-static void pr_int(lval, base, s)
-       unsigned long lval;
-       int base;
-       char *s;
+
+static void
+mkdigit(unsigned long long llval, int base, char *s)
 {
-       char ptmp[12];  /* unsigned long requires 11 digit in octal form */
-       int i;
-       char *t = ptmp;
+       char ptmp[23], *t;      /* requires 22 digit in octal at most */
+       int n;
        static const char hexdigit[] = "0123456789abcdef";
 
-       i = 1;
+       n = 1;
+       t = ptmp;
        *t++ = '\0';
        do {
-               *t++ = hexdigit[lval % base];
-       } while ((lval /= base) != 0 && ++i < sizeof(ptmp));
+               int d = (int)llval % base;
+               *t++ = hexdigit[d];
+               llval /= base;
+       } while (llval != 0 && ++n < sizeof(ptmp));
        while ((*s++ = *--t) != '\0')
-               ;
+               /* copy reserved digits */ ;
 }
 
 static void
diff -r fb1a476f0bd2 -r 9259bebffd14 sys/arch/sandpoint/stand/altboot/version
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/sys/arch/sandpoint/stand/altboot/version  Sun Jan 23 01:32:08 2011 +0000
@@ -0,0 +1,7 @@
+1.0    initial version
+1.1    PCI autoconf for multiple NIC device drivers
+1.2    Synology-DS support, Marvell-Yukon driver, fixed aligned alloc
+1.3    allow to have boot options, brdsetup.c cleanup to make brdtype
+       maintainance more confortable
+1.4    load kernels from local disk
+1.5    altboot is the new name as this is capable of handling net & dsk.



Home | Main Index | Thread Index | Old Index