Lines Matching refs:channel

47 set_channel(ata_adapter_channel_info *channel, ata_channel ataChannel)
49 channel->ataChannel = ataChannel;
54 ata_adapter_write_command_block_regs(ata_adapter_channel_info *channel,
57 pci_device_module_info *pci = channel->pci;
58 pci_device *device = channel->device;
61 uint16 ioaddr = channel->command_block_base;
63 if (channel->lost)
84 ata_adapter_read_command_block_regs(ata_adapter_channel_info *channel,
87 pci_device_module_info *pci = channel->pci;
88 pci_device *device = channel->device;
91 uint16 ioaddr = channel->command_block_base;
93 if (channel->lost)
108 ata_adapter_get_altstatus(ata_adapter_channel_info *channel)
110 pci_device_module_info *pci = channel->pci;
111 pci_device *device = channel->device;
112 uint16 altstatusaddr = channel->control_block_base;
114 if (channel->lost)
122 ata_adapter_write_device_control(ata_adapter_channel_info *channel, uint8 val)
124 pci_device_module_info *pci = channel->pci;
125 pci_device *device = channel->device;
126 uint16 device_control_addr = channel->control_block_base;
130 if (channel->lost)
140 ata_adapter_write_pio(ata_adapter_channel_info *channel, uint16 *data,
143 pci_device_module_info *pci = channel->pci;
144 pci_device *device = channel->device;
146 uint16 ioaddr = channel->command_block_base;
148 if (channel->lost)
168 ata_adapter_read_pio(ata_adapter_channel_info *channel, uint16 *data,
171 pci_device_module_info *pci = channel->pci;
172 pci_device *device = channel->device;
174 uint16 ioaddr = channel->command_block_base;
176 if (channel->lost)
198 ata_adapter_channel_info *channel = (ata_adapter_channel_info *)arg;
199 pci_device_module_info *pci = channel->pci;
200 pci_device *device = channel->device;
207 statusBM = pci->read_io_8(device, channel->bus_master_base
214 statusATA = pci->read_io_8(device, channel->command_block_base + 7);
219 pci->write_io_8(device, channel->bus_master_base + ATA_BM_STATUS_REG,
222 if (!channel->dmaing) {
230 return sATA->interrupt_handler(channel->ataChannel, statusATA);
239 ata_adapter_prepare_dma(ata_adapter_channel_info *channel,
242 pci_device_module_info *pci = channel->pci;
243 pci_device *device = channel->device;
246 prd_entry *prd = channel->prdt;
252 for (i = sgListCount - 1, prd = channel->prdt; i >= 0; --i, ++prd, ++sgList) {
267 pci->write_io_32(device, channel->bus_master_base + ATA_BM_PRDT_ADDRESS,
268 (pci->read_io_32(device, channel->bus_master_base + ATA_BM_PRDT_ADDRESS) & 3)
270 channel->prdt_phys)) & ~3));
273 status = pci->read_io_8(device, channel->bus_master_base
276 channel->bus_master_base + ATA_BM_STATUS_REG, status);
279 command = pci->read_io_8(device, channel->bus_master_base
286 pci->write_io_8(device, channel->bus_master_base + ATA_BM_COMMAND_REG,
294 ata_adapter_start_dma(ata_adapter_channel_info *channel)
296 pci_device_module_info *pci = channel->pci;
297 pci_device *device = channel->device;
300 command = pci->read_io_8(device, channel->bus_master_base
305 channel->dmaing = true;
307 pci->write_io_8(device, channel->bus_master_base + ATA_BM_COMMAND_REG,
315 ata_adapter_finish_dma(ata_adapter_channel_info *channel)
317 pci_device_module_info *pci = channel->pci;
318 pci_device *device = channel->device;
323 status = pci->read_io_8(device, channel->bus_master_base
328 command = pci->read_io_8(device, channel->bus_master_base
330 pci->write_io_8(device, channel->bus_master_base + ATA_BM_COMMAND_REG,
332 channel->dmaing = false;
335 pci->write_io_8(device, channel->bus_master_base + ATA_BM_STATUS_REG,
354 ata_adapter_channel_info *channel;
362 TRACE("PCI-ATA: init channel...\n");
391 channel = (ata_adapter_channel_info *)malloc(total_data_size);
392 if (channel == NULL) {
397 TRACE("PCI-ATA: channel index %d\n", channel_index);
399 channel->node = node;
400 channel->pci = controller->pci;
401 channel->device = controller->device;
402 channel->lost = false;
403 channel->command_block_base = command_block_base;
404 channel->control_block_base = control_block_base;
405 channel->bus_master_base = controller->bus_master_base + (channel_index * 8);
406 channel->intnum = intnum;
407 channel->dmaing = false;
408 channel->inthand = inthand;
410 TRACE("PCI-ATA: bus master base %#x\n", channel->bus_master_base);
416 channel->prd_area = create_area("prd", (void **)&channel->prdt, B_ANY_KERNEL_ADDRESS,
418 if (channel->prd_area < B_OK) {
419 res = channel->prd_area;
423 get_memory_map(channel->prdt, prdt_size, pe, 1);
424 channel->prdt_phys = pe[0].address;
426 SHOW_FLOW(3, "virt=%p, phys=%x", channel->prdt, (int)channel->prdt_phys);
428 res = install_io_interrupt_handler(channel->intnum,
429 inthand, channel, 0);
432 SHOW_ERROR(0, "couldn't install irq handler @%d", channel->intnum);
436 TRACE("PCI-ATA: init channel done\n");
439 ata_adapter_write_device_control(channel, ATA_DEVICE_CONTROL_BIT3 | ATA_DEVICE_CONTROL_DISABLE_INTS);
441 *cookie = channel;
446 delete_area(channel->prd_area);
449 free(channel);
456 ata_adapter_uninit_channel(ata_adapter_channel_info *channel)
459 ata_adapter_write_device_control(channel, ATA_DEVICE_CONTROL_BIT3 | ATA_DEVICE_CONTROL_DISABLE_INTS);
466 remove_io_interrupt_handler(channel->intnum, channel->inthand, channel);
468 delete_area(channel->prd_area);
469 free(channel);
474 ata_adapter_channel_removed(ata_adapter_channel_info *channel)
478 if (channel != NULL)
480 atomic_or((int32*)&channel->lost, 1);
484 /** publish node of ata channel */
503 // private data to identify channel
521 /** detect IDE channel */
537 // if channel works in compatibility mode, addresses and interrupt are fixed
595 // read status of primary(!) channel to detect simplex
601 // we simply disable bus mastering of second channel to satisfy that;
610 TRACE("PCI-ATA: Simplex controller - disabling DMA of secondary channel\n");