Esempio n. 1
0
/*
 * ioctl routine
 */
int
mbppioctl(dev_t dev, u_long cmd, void *data, int flags, struct lwp *l)
{
	struct mbpp_softc *ms = device_lookup_private(&mbpp_cd,
						      MAGMA_CARD(dev));
	struct mbpp_port *mp = &ms->ms_port[MAGMA_PORT(dev)];
	struct mbpp_param *bp;
	int error = 0;
	int s;

	switch(cmd) {
	case MBPPIOCSPARAM:
		bp = (struct mbpp_param *)data;
		if( bp->bp_burst < MBPP_BURST_MIN || bp->bp_burst > MBPP_BURST_MAX ||
		    bp->bp_delay < MBPP_DELAY_MIN || bp->bp_delay > MBPP_DELAY_MIN ) {
			error = EINVAL;
		} else {
			mp->mp_burst = bp->bp_burst;
			mp->mp_timeout = mbpp_mstohz(bp->bp_timeout);
			mp->mp_delay = mbpp_mstohz(bp->bp_delay);
		}
		break;
	case MBPPIOCGPARAM:
		bp = (struct mbpp_param *)data;
		bp->bp_burst = mp->mp_burst;
		bp->bp_timeout = mbpp_hztoms(mp->mp_timeout);
		bp->bp_delay = mbpp_hztoms(mp->mp_delay);
		break;
	case MBPPIOCGSTAT:
		/* XXX make this more generic */
		s = spltty();
		cd1400_write_reg(mp->mp_cd1400, CD1400_CAR, 0);
		*(int *)data = cd1400_read_reg(mp->mp_cd1400, CD1400_PSVR);
		splx(s);
		break;
	default:
		error = ENOTTY;
	}

	return(error);
}
Esempio n. 2
0
/*
 * ioctl routine
 */
int
mbppioctl(dev_t dev, u_long cmd, caddr_t data, int flags, struct proc *p)
{
    struct mbpp_softc *ms = mbpp_cd.cd_devs[MAGMA_CARD(dev)];
    struct mbpp_port *mp = &ms->ms_port[MAGMA_PORT(dev)];
    struct bpp_param *bp;
    int error = 0;
    int s;

    switch(cmd) {
    case BPPIOCSPARAM:
        bp = (struct bpp_param *)data;
        if (bp->bp_burst < BPP_BURST_MIN || bp->bp_burst > BPP_BURST_MAX ||
                bp->bp_delay < BPP_DELAY_MIN || bp->bp_delay > BPP_DELAY_MIN) {
            error = EINVAL;
        } else {
            mp->mp_burst = bp->bp_burst;
            mp->mp_timeout = mbpp_mstohz(bp->bp_timeout);
            mp->mp_delay = mbpp_mstohz(bp->bp_delay);
        }
        break;
    case BPPIOCGPARAM:
        bp = (struct bpp_param *)data;
        bp->bp_burst = mp->mp_burst;
        bp->bp_timeout = mbpp_hztoms(mp->mp_timeout);
        bp->bp_delay = mbpp_hztoms(mp->mp_delay);
        break;
    case BPPIOCGSTAT:
        /* XXX make this more generic */
        s = spltty();
        CD1400_WRITE_REG(mp->mp_cd1400, CD1400_CAR, 0);
        *(int *)data = CD1400_READ_REG(mp->mp_cd1400, CD1400_PSVR);
        splx(s);
        break;
    default:
        error = ENOTTY;
    }

    return (error);
}