xref: /haiku/headers/os/drivers/bus/ATA.h (revision 83b1a68c52ba3e0e8796282759f694b7fdddf06d)
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