From mboxrd@z Thu Jan 1 00:00:00 1970 From: erik quanstrom Date: Mon, 2 Nov 2009 16:45:07 -0500 To: 9fans@9fans.net Message-ID: <1bdac4f0786944b8523779749145784a@ladd.quanstro.net> In-Reply-To: <> References: <> MIME-Version: 1.0 Content-Type: text/plain; charset="US-ASCII" Content-Transfer-Encoding: 7bit Subject: Re: [9fans] pxeload nvram Topicbox-Message-UUID: 96232cdc-ead5-11e9-9d60-3106f5b1d025 On Mon Nov 2 15:34:25 EST 2009, nemo@lsub.org wrote: > iirc you could put nvram=/dev/sdU... > in plan9.ini. this patch, mentioned at iwp9, will also solve the problem without mangling plan9.ini: /n/sources/plan9//sys/src/libauthsrv/readnvram.c:25,46 - readnvram.c:25,32 int len; } nvtab[] = { "sparc", "#r/nvram", 1024+850, sizeof(Nvrsafe), - "pc", "#S/sdC0/nvram", 0, sizeof(Nvrsafe), - "pc", "#S/sdC0/9fat", -1, sizeof(Nvrsafe), - "pc", "#S/sdC1/nvram", 0, sizeof(Nvrsafe), - "pc", "#S/sdC1/9fat", -1, sizeof(Nvrsafe), - "pc", "#S/sdD0/nvram", 0, sizeof(Nvrsafe), - "pc", "#S/sdD0/9fat", -1, sizeof(Nvrsafe), - "pc", "#S/sdE0/nvram", 0, sizeof(Nvrsafe), - "pc", "#S/sdE0/9fat", -1, sizeof(Nvrsafe), - "pc", "#S/sdF0/nvram", 0, sizeof(Nvrsafe), - "pc", "#S/sdF0/9fat", -1, sizeof(Nvrsafe), - "pc", "#S/sd00/nvram", 0, sizeof(Nvrsafe), - "pc", "#S/sd00/9fat", -1, sizeof(Nvrsafe), - "pc", "#S/sd01/nvram", 0, sizeof(Nvrsafe), - "pc", "#S/sd01/9fat", -1, sizeof(Nvrsafe), - "pc", "#S/sd10/nvram", 0, sizeof(Nvrsafe), - "pc", "#S/sd10/9fat", -1, sizeof(Nvrsafe), + "pc", "#S/%s%x/9fat", -1, 512, + "pc", "#S/%s%x/nvram", 0, 512, "pc", "#f/fd0disk", -1, 512, /* 512: #f requires whole sector reads */ "pc", "#f/fd1disk", -1, 512, "mips", "#r/nvram", 1024+900, sizeof(Nvrsafe), /n/sources/plan9//sys/src/libauthsrv/readnvram.c:123,128 - readnvram.c:109,152 } } + static int + sdnvram0(char *s, int l, int tabi) + { + char *p, *f[3], buf[16]; + int fd, i; + + s[l] = 0; + for(; p = strchr(s, '\n'); s = p + 1){ + if(tokenize(s, f, nelem(f)) < 1) + continue; + for(i = 0; i < 0x10; i++){ + snprint(buf, sizeof buf, nvtab[tabi].file, f[0], i); + if((fd = open(buf, ORDWR)) >= 0) + return fd; + } + } + return -1; + } + + static int + sdnvram(int tabi) + { + char *s; + int fd, l, r; + + fd = open("#S/sdctl", OREAD); + if(fd == -1) + return -1; + r = -1; + l = 1024; /* #S/sdctl has 0 size; guess */ + if(s = malloc(l + 1)) + if((l = read(fd, s, l)) > 0) + r = sdnvram0(s, l, tabi); + free(s); + close(fd); + return r; + } + typedef struct { int fd; int safeoff; /n/sources/plan9//sys/src/libauthsrv/readnvram.c:185,191 - readnvram.c:209,219 for(i=0; i