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