Lines Matching refs:ch

97     struct ata_channel *ch = device_get_softc(dev);
105 if (ch->r_irq)
109 ch->dev = dev;
110 ch->state = ATA_IDLE;
111 bzero(&ch->state_mtx, sizeof(struct mtx));
112 mtx_init(&ch->state_mtx, "ATA state lock", NULL, MTX_DEF);
113 TASK_INIT(&ch->conntask, 0, ata_conn_event, dev);
115 ch->user[i].revision = 0;
123 ch->user[i].revision = mode;
124 ch->user[i].mode = 0;
135 ch->user[i].mode = mode;
136 if (ch->flags & ATA_SATA)
137 ch->user[i].bytecount = 8192;
139 ch->user[i].bytecount = MAXPHYS;
140 ch->user[i].caps = 0;
141 ch->curr[i] = ch->user[i];
142 if (ch->flags & ATA_SATA) {
143 if (ch->pm_level > 0)
144 ch->user[i].caps |= CTS_SATA_CAPS_H_PMREQ;
145 if (ch->pm_level > 1)
146 ch->user[i].caps |= CTS_SATA_CAPS_D_PMREQ;
148 if (!(ch->flags & ATA_NO_48BIT_DMA))
149 ch->user[i].caps |= CTS_ATA_CAPS_H_DMA48;
152 callout_init(&ch->poll_callout, 1);
155 if (ch->dma.alloc)
156 ch->dma.alloc(dev);
160 ch->r_irq = bus_alloc_resource_any(dev, SYS_RES_IRQ, &rid,
162 if (!ch->r_irq) {
166 if ((error = bus_setup_intr(dev, ch->r_irq, ATA_INTR_FLAGS, NULL,
167 ata_interrupt, ch, &ch->ih))) {
168 bus_release_resource(dev, SYS_RES_IRQ, rid, ch->r_irq);
173 if (ch->flags & ATA_PERIODIC_POLL)
174 callout_reset(&ch->poll_callout, hz, ata_periodic_poll, ch);
175 mtx_lock(&ch->state_mtx);
184 ch->sim = cam_sim_alloc(ataaction, atapoll, "ata", ch,
185 device_get_unit(dev), &ch->state_mtx, 1, 0, devq);
186 if (ch->sim == NULL) {
192 if (xpt_bus_register(ch->sim, dev, 0) != CAM_SUCCESS) {
197 if (xpt_create_path(&ch->path, /*periph*/NULL, cam_sim_path(ch->sim),
203 mtx_unlock(&ch->state_mtx);
207 xpt_bus_deregister(cam_sim_path(ch->sim));
209 cam_sim_free(ch->sim, /*free_devq*/TRUE);
210 ch->sim = NULL;
212 bus_release_resource(dev, SYS_RES_IRQ, rid, ch->r_irq);
213 mtx_unlock(&ch->state_mtx);
214 if (ch->flags & ATA_PERIODIC_POLL)
215 callout_drain(&ch->poll_callout);
222 struct ata_channel *ch = device_get_softc(dev);
225 if (!ch->r_irq)
229 mtx_lock(&ch->state_mtx);
230 ch->state |= ATA_STALL_QUEUE;
231 mtx_unlock(&ch->state_mtx);
232 if (ch->flags & ATA_PERIODIC_POLL)
233 callout_drain(&ch->poll_callout);
235 taskqueue_drain(taskqueue_thread, &ch->conntask);
237 mtx_lock(&ch->state_mtx);
238 xpt_async(AC_LOST_DEVICE, ch->path, NULL);
239 xpt_free_path(ch->path);
240 xpt_bus_deregister(cam_sim_path(ch->sim));
241 cam_sim_free(ch->sim, /*free_devq*/TRUE);
242 ch->sim = NULL;
243 mtx_unlock(&ch->state_mtx);
246 bus_teardown_intr(dev, ch->r_irq, ch->ih);
247 bus_release_resource(dev, SYS_RES_IRQ, ATA_IRQ_RID, ch->r_irq);
248 ch->r_irq = NULL;
251 if (ch->dma.free)
252 ch->dma.free(dev);
254 mtx_destroy(&ch->state_mtx);
262 struct ata_channel *ch = device_get_softc(dev);
265 mtx_lock(&ch->state_mtx);
266 if (ch->sim == NULL) {
267 mtx_unlock(&ch->state_mtx);
274 cam_sim_path(ch->sim),
280 mtx_unlock(&ch->state_mtx);
286 struct ata_channel *ch = device_get_softc(dev);
289 xpt_freeze_simq(ch->sim, 1);
290 if ((request = ch->running)) {
291 ch->running = NULL;
292 if (ch->state == ATA_ACTIVE)
293 ch->state = ATA_IDLE;
295 if (ch->dma.unload)
296 ch->dma.unload(request);
303 xpt_async(AC_BUS_RESET, ch->path, NULL);
304 xpt_release_simq(ch->sim, TRUE);
311 struct ata_channel *ch;
314 if (!dev || !(ch = device_get_softc(dev)))
317 if (ch->flags & ATA_PERIODIC_POLL)
318 callout_drain(&ch->poll_callout);
319 mtx_lock(&ch->state_mtx);
320 xpt_freeze_simq(ch->sim, 1);
321 while (ch->state != ATA_IDLE)
322 msleep(ch, &ch->state_mtx, PRIBIO, "atasusp", hz/100);
323 mtx_unlock(&ch->state_mtx);
330 struct ata_channel *ch;
334 if (!dev || !(ch = device_get_softc(dev)))
337 mtx_lock(&ch->state_mtx);
339 xpt_release_simq(ch->sim, TRUE);
340 mtx_unlock(&ch->state_mtx);
341 if (ch->flags & ATA_PERIODIC_POLL)
342 callout_reset(&ch->poll_callout, hz, ata_periodic_poll, ch);
349 struct ata_channel *ch = (struct ata_channel *)data;
351 mtx_lock(&ch->state_mtx);
353 mtx_unlock(&ch->state_mtx);
359 struct ata_channel *ch = (struct ata_channel *)data;
363 if (ch->hw.status && !ch->hw.status(ch->dev))
367 if (!(request = ch->running))
373 if (ch->state == ATA_IDLE) {
382 if (ch->hw.end_transaction(request) == ATA_OP_FINISHED) {
383 ch->running = NULL;
384 if (ch->state == ATA_ACTIVE)
385 ch->state = ATA_IDLE;
386 ata_cam_end_transaction(ch->dev, request);
394 struct ata_channel *ch = (struct ata_channel *)data;
396 callout_reset(&ch->poll_callout, hz, ata_periodic_poll, ch);
397 ata_interrupt(ch);
413 struct ata_channel *ch = device_get_softc(dev);
416 ch->r_io[ATA_ERROR].res = ch->r_io[ATA_FEATURE].res;
417 ch->r_io[ATA_ERROR].offset = ch->r_io[ATA_FEATURE].offset;
418 ch->r_io[ATA_IREASON].res = ch->r_io[ATA_COUNT].res;
419 ch->r_io[ATA_IREASON].offset = ch->r_io[ATA_COUNT].offset;
420 ch->r_io[ATA_STATUS].res = ch->r_io[ATA_COMMAND].res;
421 ch->r_io[ATA_STATUS].offset = ch->r_io[ATA_COMMAND].offset;
422 ch->r_io[ATA_ALTSTAT].res = ch->r_io[ATA_CONTROL].res;
423 ch->r_io[ATA_ALTSTAT].offset = ch->r_io[ATA_CONTROL].offset;
697 struct ata_channel *ch = device_get_softc(dev);
699 return (ch->devices & (ATA_ATAPI_MASTER << target));
705 struct ata_channel *ch;
707 ch = device_get_softc(request->parent);
717 if (ch->state == ATA_ACTIVE) {
719 if (ch->dma.unload)
720 ch->dma.unload(request);
721 ch->running = NULL;
722 ch->state = ATA_IDLE;
723 ata_cam_end_transaction(ch->dev, request);
725 mtx_unlock(&ch->state_mtx);
731 struct ata_channel *ch = device_get_softc(dev);
734 request = &ch->request;
776 ch->curr[ccb->ccb_h.target_id].bytecount);
786 if (ch->curr[ccb->ccb_h.target_id].atapi == 16)
789 ch->curr[ccb->ccb_h.target_id].mode >= ATA_DMA)
796 ch->curr[ccb->ccb_h.target_id].bytecount);
800 callout_init_mtx(&request->callout, &ch->state_mtx, CALLOUT_RETURNUNLOCKED);
804 ch->running = request;
805 ch->state = ATA_ACTIVE;
806 if (ch->hw.begin_transaction(request) == ATA_OP_FINISHED) {
807 ch->running = NULL;
808 ch->state = ATA_IDLE;
817 struct ata_channel *ch = device_get_softc(dev);
820 ch->requestsense = 1;
831 if (ch->curr[ccb->ccb_h.target_id].atapi == 16)
833 if (ch->curr[ccb->ccb_h.target_id].mode >= ATA_DMA)
837 ch->curr[ccb->ccb_h.target_id].bytecount);
840 callout_init_mtx(&request->callout, &ch->state_mtx, CALLOUT_RETURNUNLOCKED);
843 ch->running = request;
844 ch->state = ATA_ACTIVE;
845 if (ch->hw.begin_transaction(request) == ATA_OP_FINISHED) {
846 ch->running = NULL;
847 ch->state = ATA_IDLE;
856 struct ata_channel *ch = device_get_softc(dev);
860 ch->requestsense = 0;
882 struct ata_channel *ch = device_get_softc(dev);
886 if (ch->requestsense) {
893 xpt_freeze_simq(ch->sim, 1);
953 struct ata_channel *ch = device_get_softc(dev);
955 if (ccb->ccb_h.target_id > ((ch->flags & ATA_NO_SLAVE) ? 0 : 1)) {
978 struct ata_channel *ch;
983 ch = (struct ata_channel *)cam_sim_softc(sim);
984 dev = ch->dev;
991 if ((ch->devices & ((ATA_ATA_MASTER | ATA_ATAPI_MASTER)
996 if (ch->running)
1004 if (ch->devices & (ATA_ATA_MASTER << ccb->ccb_h.target_id)) {
1028 d = &ch->curr[ccb->ccb_h.target_id];
1030 d = &ch->user[ccb->ccb_h.target_id];
1031 if (ch->flags & ATA_SATA) {
1036 d->mode = ATA_SETMODE(ch->dev,
1051 d->mode = ATA_SETMODE(ch->dev,
1075 d = &ch->curr[ccb->ccb_h.target_id];
1077 d = &ch->user[ccb->ccb_h.target_id];
1080 if (ch->flags & ATA_SATA) {
1097 if (ch->pm_level) {
1102 ch->user[ccb->ccb_h.target_id].caps;
1122 if (!(ch->flags & ATA_NO_48BIT_DMA))
1126 ch->user[ccb->ccb_h.target_id].caps;
1155 if (ch->flags & ATA_NO_SLAVE)
1162 if (ch->flags & ATA_SATA)
1170 if (ch->flags & ATA_SATA)
1177 cpi->maxio = ch->dma.max_iosize ? ch->dma.max_iosize : DFLTPHYS;
1198 struct ata_channel *ch = (struct ata_channel *)cam_sim_softc(sim);
1200 ata_interrupt_locked(ch);