Lines Matching refs:wi

1442                     struct wd_ioctl *wi;  in wdioctl()  local
1446 wi = wi_get(wd); in wdioctl()
1447 wi->wi_atareq = *atareq; in wdioctl()
1455 wi->wi_iov.iov_base = tbuf; in wdioctl()
1456 wi->wi_iov.iov_len = DEV_BSIZE; in wdioctl()
1457 UIO_SETUP_SYSSPACE(&wi->wi_uio); in wdioctl()
1460 wi->wi_iov.iov_base = atareq->databuf; in wdioctl()
1461 wi->wi_iov.iov_len = atareq->datalen; in wdioctl()
1462 wi->wi_uio.uio_vmspace = l->l_proc->p_vmspace; in wdioctl()
1464 wi->wi_uio.uio_iov = &wi->wi_iov; in wdioctl()
1465 wi->wi_uio.uio_iovcnt = 1; in wdioctl()
1466 wi->wi_uio.uio_resid = atareq->datalen; in wdioctl()
1467 wi->wi_uio.uio_offset = 0; in wdioctl()
1468 wi->wi_uio.uio_rw = in wdioctl()
1470 error1 = physio(wdioctlstrategy, &wi->wi_bp, dev, in wdioctl()
1472 wdminphys, &wi->wi_uio); in wdioctl()
1481 wi->wi_bp.b_flags = 0; in wdioctl()
1482 wi->wi_bp.b_data = 0; in wdioctl()
1483 wi->wi_bp.b_bcount = 0; in wdioctl()
1484 wi->wi_bp.b_dev = dev; in wdioctl()
1485 wi->wi_bp.b_proc = l->l_proc; in wdioctl()
1486 wdioctlstrategy(&wi->wi_bp); in wdioctl()
1487 error1 = wi->wi_bp.b_error; in wdioctl()
1489 *atareq = wi->wi_atareq; in wdioctl()
1490 wi_free(wi); in wdioctl()
2011 struct wd_ioctl *wi; in wi_get() local
2013 wi = kmem_zalloc(sizeof(struct wd_ioctl), KM_SLEEP); in wi_get()
2014 wi->wi_softc = wd; in wi_get()
2015 buf_init(&wi->wi_bp); in wi_get()
2017 return (wi); in wi_get()
2025 wi_free(struct wd_ioctl *wi) in wi_free() argument
2027 buf_destroy(&wi->wi_bp); in wi_free()
2028 kmem_free(wi, sizeof(*wi)); in wi_free()
2042 wi_sector_size(const struct wd_ioctl * const wi) in wi_sector_size() argument
2044 switch (wi->wi_atareq.command) { in wi_sector_size()
2059 return wi->wi_softc->sc_blksize; in wi_sector_size()
2090 struct wd_ioctl *wi; in wdioctlstrategy() local
2094 wi = wi_find(bp); in wdioctlstrategy()
2095 if (wi == NULL) { in wdioctlstrategy()
2102 xfer = ata_get_xfer(wi->wi_softc->drvp->chnl_softc, true); in wdioctlstrategy()
2108 if (bp->b_bcount != wi->wi_atareq.datalen) { in wdioctlstrategy()
2119 if ((bp->b_bcount % wi_sector_size(wi)) != 0 || in wdioctlstrategy()
2120 (bp->b_bcount / wi_sector_size(wi)) >= in wdioctlstrategy()
2130 if (wi->wi_atareq.timeout == 0) { in wdioctlstrategy()
2135 if (wi->wi_atareq.flags & ATACMD_READ) in wdioctlstrategy()
2137 else if (wi->wi_atareq.flags & ATACMD_WRITE) in wdioctlstrategy()
2140 if (wi->wi_atareq.flags & ATACMD_READREG) in wdioctlstrategy()
2143 if ((wi->wi_atareq.flags & ATACMD_LBA) != 0) in wdioctlstrategy()
2148 xfer->c_ata_c.timeout = wi->wi_atareq.timeout; in wdioctlstrategy()
2149 xfer->c_ata_c.r_command = wi->wi_atareq.command; in wdioctlstrategy()
2150 xfer->c_ata_c.r_lba = ((wi->wi_atareq.head & 0x0f) << 24) | in wdioctlstrategy()
2151 (wi->wi_atareq.cylinder << 8) | in wdioctlstrategy()
2152 wi->wi_atareq.sec_num; in wdioctlstrategy()
2153 xfer->c_ata_c.r_count = wi->wi_atareq.sec_count; in wdioctlstrategy()
2154 xfer->c_ata_c.r_features = wi->wi_atareq.features; in wdioctlstrategy()
2157 xfer->c_ata_c.data = wi->wi_bp.b_data; in wdioctlstrategy()
2158 xfer->c_ata_c.bcount = wi->wi_bp.b_bcount; in wdioctlstrategy()
2160 wi->wi_softc->atabus->ata_exec_command(wi->wi_softc->drvp, xfer); in wdioctlstrategy()
2161 ata_wait_cmd(wi->wi_softc->drvp->chnl_softc, xfer); in wdioctlstrategy()
2165 wi->wi_atareq.retsts = ATACMD_ERROR; in wdioctlstrategy()
2166 wi->wi_atareq.error = xfer->c_ata_c.r_error; in wdioctlstrategy()
2168 wi->wi_atareq.retsts = ATACMD_DF; in wdioctlstrategy()
2170 wi->wi_atareq.retsts = ATACMD_TIMEOUT; in wdioctlstrategy()
2172 wi->wi_atareq.retsts = ATACMD_OK; in wdioctlstrategy()
2173 if (wi->wi_atareq.flags & ATACMD_READREG) { in wdioctlstrategy()
2174 wi->wi_atareq.command = xfer->c_ata_c.r_status; in wdioctlstrategy()
2175 wi->wi_atareq.features = xfer->c_ata_c.r_error; in wdioctlstrategy()
2176 wi->wi_atareq.sec_count = xfer->c_ata_c.r_count; in wdioctlstrategy()
2177 wi->wi_atareq.sec_num = xfer->c_ata_c.r_lba & 0xff; in wdioctlstrategy()
2178 wi->wi_atareq.head = (xfer->c_ata_c.r_device & 0xf0) | in wdioctlstrategy()
2180 wi->wi_atareq.cylinder = in wdioctlstrategy()
2182 wi->wi_atareq.error = xfer->c_ata_c.r_error; in wdioctlstrategy()
2187 ata_free_xfer(wi->wi_softc->drvp->chnl_softc, xfer); in wdioctlstrategy()