- /* print out description of drive, suppressing multiple blanks*/
- if (wdgetctlr(du) == 0) {
- int i, blank;
-
- printf(" [%d: wd%d: ", unit, lunit);
- for (i = blank = 0 ; i < sizeof(du->dk_params.wdp_model); i++) {
- char c = du->dk_params.wdp_model[i];
-
- if (blank && c == ' ')
- continue;
- if (blank && c != ' ') {
- printf(" %c", c);
- blank = 0;
- continue;
- }
- if (c == ' ')
- blank = 1;
- else
- printf("%c", c);
- }
- printf("]");
- }
- else {
+ /*
+ * Print out description of drive.
+ * wdp_model can be [0..40] bytes, thus \0 can be missing so
+ * so copy it and add a null before printing.
+ */
+ if (wdgetctlr(du) == 0) {
+ char buf[sizeof(du->dk_params.wdp_model) + 1];
+ bcopy(du->dk_params.wdp_model, buf, sizeof(buf)-1);
+ buf[sizeof(buf)-1] = '\0';
+ printf("wdc%d: unit %d (wd%d): <%s>\n",
+ dvp->id_unit, unit, lunit, buf);
+ if (du->dk_params.wdp_heads == 0)
+ printf("wd%d: size unknown\n", lunit);
+ else
+ printf("wd%d: %luMB (%lu total sec), ",
+ lunit,
+ du->dk_dd.d_secperunit
+ * du->dk_dd.d_secsize / (1024 * 1024),
+ du->dk_dd.d_secperunit);
+ printf("%lu cyl, %lu head, %lu sec, bytes/sec %lu\n",
+ du->dk_dd.d_ncylinders,
+ du->dk_dd.d_ntracks,
+ du->dk_dd.d_nsectors,
+ du->dk_dd.d_secsize);
+ /*
+ * Start timeout routine for this drive.
+ * XXX timeout should be per controller.
+ */
+ wdtimeout((caddr_t)du, 0);
+ } else {