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 --- |