1 /* 2 * Copyright 2002/03, Thomas Kurschel. All rights reserved. 3 * Distributed under the terms of the MIT License. 4 */ 5 #ifndef __ATA_H__ 6 #define __ATA_H__ 7 8 #include <device_manager.h> 9 #include <KernelExport.h> 10 11 // Controller Driver Node 12 13 // attributes: 14 15 // node type 16 #define ATA_BUS_TYPE_NAME "bus/ide/v1" 17 // maximum number of devices connected to controller (uint8, optional, default:2) 18 #define ATA_CONTROLLER_MAX_DEVICES_ITEM "ide/max_devices" 19 // set to not-0 if DMA is supported (uint8, optional, default:0) 20 #define ATA_CONTROLLER_CAN_DMA_ITEM "ide/can_DMA" 21 // name of controller (string, required) 22 #define ATA_CONTROLLER_CONTROLLER_NAME_ITEM "ide/controller_name" 23 24 union ata_task_file; 25 typedef unsigned int ata_reg_mask; 26 27 // channel cookie, issued by ata bus manager 28 typedef void* ata_channel; 29 30 // interface of controller driver 31 typedef struct { 32 driver_module_info info; 33 34 void (*set_channel)(void *cookie, ata_channel channel); 35 36 status_t (*write_command_block_regs)(void *channelCookie, 37 union ata_task_file *file, ata_reg_mask mask); 38 status_t (*read_command_block_regs)(void *channelCookie, 39 union ata_task_file *file, ata_reg_mask mask); 40 41 uint8 (*get_altstatus)(void *channelCookie); 42 status_t (*write_device_control)(void *channelCookie, uint8 val); 43 44 status_t (*write_pio)(void *channelCookie, uint16 *data, int count, 45 bool force16Bit); 46 status_t (*read_pio)(void *channelCookie, uint16 *data, int count, 47 bool force16Bit); 48 49 status_t (*prepare_dma)(void *channelCookie, const physical_entry *sg_list, 50 size_t sg_list_count, bool write); 51 status_t (*start_dma)(void *channelCookie); 52 status_t (*finish_dma)(void *channelCookie); 53 } ata_controller_interface; 54 55 56 // Interface for Controller Driver 57 58 // interface of bus manager as seen from controller driver 59 // use this interface as the fixed consumer of your controller driver 60 typedef struct { 61 driver_module_info info; 62 63 // status - status read from controller (_not_ alt_status, as reading 64 // normal status acknowledges IRQ request of device) 65 status_t (*interrupt_handler)(ata_channel channel, uint8 status); 66 } ata_for_controller_interface; 67 68 #define ATA_FOR_CONTROLLER_MODULE_NAME "bus_managers/ide/controller/driver_v1" 69 70 #endif /* __ATA_H__ */ 71