mmc_op
struct mmc_op op;
struct mmc_op mmc_op;
bzero(&mmc_op, sizeof(struct mmc_op));
mmc_op.operation = MMC_OP_SYNCHRONISECACHE;
(void) ioctl(dev_fd, MMCOP, &mmc_op);
struct mmc_op op;
struct mmc_op op;
return mmc_do_op(periph, (struct mmc_op *) addr);
static int mmc_do_op(struct scsipi_periph *, struct mmc_op *);
mmc_do_closetrack(struct scsipi_periph *periph, struct mmc_op *mmc_op)
int mmc_profile = mmc_op->mmc_profile;
return mmc_doclose(periph, mmc_op->tracknr, 1);
mmc_do_close_or_finalise(struct scsipi_periph *periph, struct mmc_op *mmc_op)
int mmc_profile = mmc_op->mmc_profile;
close = (mmc_op->operation == MMC_OP_CLOSESESSION);
return mmc_doclose(periph, mmc_op->sessionnr, func);
mmc_do_reserve_track(struct scsipi_periph *periph, struct mmc_op *mmc_op)
extent = mmc_op->extent;
mmc_do_reserve_track_nwa(struct scsipi_periph *periph, struct mmc_op *mmc_op)
switch (mmc_op->mmc_profile) {
if (mmc_op->extent <= 152)
mmc_op->extent -= 152;
return mmc_do_reserve_track(periph, mmc_op);
if (mmc_op->extent % 16)
mmc_op->extent -= 16;
return mmc_do_reserve_track(periph, mmc_op);
if (mmc_op->extent % 32)
mmc_op->extent -= 32;
return mmc_do_reserve_track(periph, mmc_op);
mmc_do_repair_track(struct scsipi_periph *periph, struct mmc_op *mmc_op)
_lto2b(mmc_op->tracknr, repair_cmd.tracknr);
mmc_do_op(struct scsipi_periph *periph, struct mmc_op *mmc_op)
if (mmc_op->operation < 1 || mmc_op->operation > MMC_OP_MAX)
if (mmc_op->operation == MMC_OP_SYNCHRONISECACHE)
if (mmc_op->mmc_profile == 0) {
switch (mmc_op->operation) {
return mmc_do_closetrack(periph, mmc_op);
return mmc_do_close_or_finalise(periph, mmc_op);
return mmc_do_reserve_track(periph, mmc_op);
return mmc_do_reserve_track_nwa(periph, mmc_op);
return mmc_do_repair_track(periph, mmc_op);
printf("mmc_do_op: unhandled operation %d\n", mmc_op->operation);
struct mmc_op mmc_op;
memset(&mmc_op, 0, sizeof(struct mmc_op));
mmc_op.operation = MMC_OP_SYNCHRONISECACHE;
(void) VOP_IOCTL(ump->devvp, MMCOP, &mmc_op, FKIOCTL, NOCRED);
struct mmc_op mmc_op;
memset(&mmc_op, 0, sizeof(mmc_op));
mmc_op.operation = MMC_OP_CLOSETRACK;
mmc_op.mmc_profile = ump->discinfo.mmc_profile;
mmc_op.tracknr = tracknr;
error = VOP_IOCTL(devvp, MMCOP, &mmc_op,
memset(&mmc_op, 0, sizeof(mmc_op));
mmc_op.operation = MMC_OP_CLOSESESSION;
mmc_op.mmc_profile = ump->discinfo.mmc_profile;
mmc_op.sessionnr = ump->discinfo.num_sessions;
error = VOP_IOCTL(devvp, MMCOP, &mmc_op,
memset(&mmc_op, 0, sizeof(mmc_op));
mmc_op.operation = MMC_OP_FINALISEDISC;
mmc_op.mmc_profile = ump->discinfo.mmc_profile;
mmc_op.sessionnr = ump->discinfo.num_sessions;
error = VOP_IOCTL(devvp, MMCOP, &mmc_op,
struct mmc_op mmc_op;
memset(&mmc_op, 0, sizeof(mmc_op));
mmc_op.operation = MMC_OP_REPAIRTRACK;
mmc_op.mmc_profile = ump->discinfo.mmc_profile;
mmc_op.tracknr = tracknr;
error = VOP_IOCTL(devvp, MMCOP, &mmc_op, FKIOCTL, NOCRED);
#define MMCOP _IOWR('c', 30, struct mmc_op)