fdc.c (4b87c653f91b8ad27447e744ba53cb788f952faf) fdc.c (2221dbebceb2dfb9e1c0248e4e748f8a61ab5e55)
1/*-
2 * Copyright (c) 2004 Poul-Henning Kamp
3 * Copyright (c) 1990 The Regents of the University of California.
4 * All rights reserved.
5 *
6 * This code is derived from software contributed to Berkeley by
7 * Don Ahn.
8 *

--- 1393 unchanged lines hidden (view full) ---

1402 }
1403 bp->bio_pblkno = bp->bio_offset / fd->sectorsize;
1404 bp->bio_resid = bp->bio_length;
1405 fd_enqueue(fd, bp);
1406 return;
1407}
1408
1409static int
1/*-
2 * Copyright (c) 2004 Poul-Henning Kamp
3 * Copyright (c) 1990 The Regents of the University of California.
4 * All rights reserved.
5 *
6 * This code is derived from software contributed to Berkeley by
7 * Don Ahn.
8 *

--- 1393 unchanged lines hidden (view full) ---

1402 }
1403 bp->bio_pblkno = bp->bio_offset / fd->sectorsize;
1404 bp->bio_resid = bp->bio_length;
1405 fd_enqueue(fd, bp);
1406 return;
1407}
1408
1409static int
1410fd_ioctl(struct g_provider *pp, u_long cmd, void *data, struct thread *td)
1410fd_ioctl(struct g_provider *pp, u_long cmd, void *data, int fflag, struct thread *td)
1411{
1412 struct fd_data *fd;
1413 struct fdc_status *fsp;
1414 struct fdc_readid *rid;
1415 int error;
1416
1417 fd = pp->geom->softc;
1418
1419 switch (cmd) {
1420 case FD_GTYPE: /* get drive type */
1421 *(struct fd_type *)data = *fd->ft;
1422 return (0);
1423
1424 case FD_STYPE: /* set drive type */
1411{
1412 struct fd_data *fd;
1413 struct fdc_status *fsp;
1414 struct fdc_readid *rid;
1415 int error;
1416
1417 fd = pp->geom->softc;
1418
1419 switch (cmd) {
1420 case FD_GTYPE: /* get drive type */
1421 *(struct fd_type *)data = *fd->ft;
1422 return (0);
1423
1424 case FD_STYPE: /* set drive type */
1425 if (!fflag & FWRITE)
1426 return (EPERM);
1425 /*
1426 * Allow setting drive type temporarily iff
1427 * currently unset. Used for fdformat so any
1428 * user can set it, and then start formatting.
1429 */
1430 fd->fts = *(struct fd_type *)data;
1431 if (fd->fts.sectrac) {
1432 /* XXX: check for rubbish */

--- 5 unchanged lines hidden (view full) ---

1438 fdprinttype(fd->ft);
1439 return (0);
1440
1441 case FD_GOPTS: /* get drive options */
1442 *(int *)data = fd->options;
1443 return (0);
1444
1445 case FD_SOPTS: /* set drive options */
1427 /*
1428 * Allow setting drive type temporarily iff
1429 * currently unset. Used for fdformat so any
1430 * user can set it, and then start formatting.
1431 */
1432 fd->fts = *(struct fd_type *)data;
1433 if (fd->fts.sectrac) {
1434 /* XXX: check for rubbish */

--- 5 unchanged lines hidden (view full) ---

1440 fdprinttype(fd->ft);
1441 return (0);
1442
1443 case FD_GOPTS: /* get drive options */
1444 *(int *)data = fd->options;
1445 return (0);
1446
1447 case FD_SOPTS: /* set drive options */
1448 if (!fflag & FWRITE)
1449 return (EPERM);
1446 fd->options = *(int *)data;
1447 return (0);
1448
1449 case FD_CLRERR:
1450 if (suser(td) != 0)
1451 return (EPERM);
1452 fd->fdc->fdc_errs = 0;
1453 return (0);

--- 5 unchanged lines hidden (view full) ---

1459 memcpy(fsp->status, fd->fdc->status, 7 * sizeof(u_int));
1460 return (0);
1461
1462 case FD_GDTYPE:
1463 *(enum fd_drivetype *)data = fd->type;
1464 return (0);
1465
1466 case FD_FORM:
1450 fd->options = *(int *)data;
1451 return (0);
1452
1453 case FD_CLRERR:
1454 if (suser(td) != 0)
1455 return (EPERM);
1456 fd->fdc->fdc_errs = 0;
1457 return (0);

--- 5 unchanged lines hidden (view full) ---

1463 memcpy(fsp->status, fd->fdc->status, 7 * sizeof(u_int));
1464 return (0);
1465
1466 case FD_GDTYPE:
1467 *(enum fd_drivetype *)data = fd->type;
1468 return (0);
1469
1470 case FD_FORM:
1471 if (!fflag & FWRITE)
1472 return (EPERM);
1467 if (((struct fd_formb *)data)->format_version !=
1468 FD_FORMAT_VERSION)
1469 return (EINVAL); /* wrong version of formatting prog */
1470 error = fdmisccmd(fd, BIO_FMT, data);
1471 mtx_lock(&fd->fdc->fdc_mtx);
1472 fd->flags |= FD_NEWDISK;
1473 mtx_unlock(&fd->fdc->fdc_mtx);
1474 break;

--- 521 unchanged lines hidden ---
1473 if (((struct fd_formb *)data)->format_version !=
1474 FD_FORMAT_VERSION)
1475 return (EINVAL); /* wrong version of formatting prog */
1476 error = fdmisccmd(fd, BIO_FMT, data);
1477 mtx_lock(&fd->fdc->fdc_mtx);
1478 fd->flags |= FD_NEWDISK;
1479 mtx_unlock(&fd->fdc->fdc_mtx);
1480 break;

--- 521 unchanged lines hidden ---