atareq
struct atareq req;
struct atareq req;
struct atareq req;
struct atareq req;
struct atareq req;
struct atareq req;
struct atareq req;
struct atareq req;
struct atareq req;
struct atareq req;
struct atareq req;
struct atareq req;
struct atareq req;
struct atareq req;
struct atareq req;
struct atareq req;
struct atareq req;
ata_command(struct atareq *req)
void ata_command(struct atareq *);
struct atareq req;
struct atareq req;
struct atareq req;
wdc_ioc_ata_cmd(struct ata_drive_datas *drvp, atareq_t *atareq)
if (atareq->timeout == 0)
if (atareq->datalen > MAXPHYS)
if (atareq->datalen > 0) {
wdc_c.data = dma_alloc(atareq->datalen, PR_NOWAIT | PR_ZERO);
wdc_c.bcount = atareq->datalen;
if (atareq->flags & ATACMD_READ)
if (atareq->flags & ATACMD_WRITE) {
if (atareq->datalen > 0) {
err = copyin(atareq->databuf, wdc_c.data,
atareq->datalen);
if (atareq->flags & ATACMD_READREG)
wdc_c.timeout = atareq->timeout;
wdc_c.r_command = atareq->command;
wdc_c.r_head = atareq->head & 0x0f;
wdc_c.r_cyl = atareq->cylinder;
wdc_c.r_sector = atareq->sec_num;
wdc_c.r_count = atareq->sec_count;
wdc_c.r_features = atareq->features;
atareq->retsts = ATACMD_ERROR;
atareq->retsts = ATACMD_ERROR;
atareq->error = wdc_c.r_error;
atareq->retsts = ATACMD_DF;
atareq->retsts = ATACMD_TIMEOUT;
atareq->retsts = ATACMD_OK;
if (atareq->flags & ATACMD_READREG) {
atareq->head = wdc_c.r_head;
atareq->cylinder = wdc_c.r_cyl;
atareq->sec_num = wdc_c.r_sector;
atareq->sec_count = wdc_c.r_count;
atareq->features = wdc_c.r_features;
atareq->error = wdc_c.r_error;
if (atareq->datalen > 0 && atareq->flags & ATACMD_READ) {
err = copyout(wdc_c.data, atareq->databuf, atareq->datalen);
dma_free(wdc_c.data, atareq->datalen);
atareq_t *atareq = (atareq_t *)addr;
if ((flag & FWRITE) == 0 && atareq->flags & ATACMD_WRITE)
error = wdc_ioc_ata_cmd(drvp, atareq);
scsi_ioc_ata_cmd(struct scsi_link *link, atareq_t *atareq)
if (atareq->datalen > MAXPHYS)
if (atareq->datalen > 0) {
if (ISSET(atareq->flags, ATACMD_READ)) {
cdb->features = atareq->features;
cdb->sector_count = atareq->sec_count;
cdb->lba_low = atareq->sec_num;
cdb->lba_mid = atareq->cylinder;
cdb->lba_high = atareq->cylinder >> 8;
cdb->device = atareq->head & 0x0f;
cdb->command = atareq->command;
if (atareq->datalen > 0) {
xs->data = dma_alloc(atareq->datalen, PR_WAITOK | PR_ZERO);
xs->datalen = atareq->datalen;
if (ISSET(atareq->flags, ATACMD_READ))
if (ISSET(atareq->flags, ATACMD_WRITE)) {
if (atareq->datalen > 0) {
err = copyin(atareq->databuf, xs->data,
atareq->datalen);
atareq->retsts = ATACMD_ERROR;
atareq->retsts = ATACMD_OK;
atareq->retsts = ATACMD_ERROR;
if (atareq->datalen > 0 && ISSET(atareq->flags, ATACMD_READ)) {
err = copyout(xs->data, atareq->databuf, atareq->datalen);
dma_free(xs->data, atareq->datalen);