On Mon Nov 2 15:34:25 EST 2009, n...@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<nelem(nvtab); i++){ if(strcmp(cputype, nvtab[i].cputype) != 0) continue; - if((fd = open(nvtab[i].file, ORDWR)) < 0) + if(nvtab[i].file[0] == '#' && nvtab[i].file[1] == 'S') + fd = sdnvram(i); + else + fd = open(nvtab[i].file, ORDWR); + if(fd < 0) continue; safeoff = nvtab[i].off; safelen = nvtab[i].len;