1/*
2 * Copyright (c) 2016, ETH Zurich.
3 * All rights reserved.
4 *
5 * This file is distributed under the terms in the attached LICENSE file.
6 * If you do not find this file, copies can be found by writing to:
7 * ETH Zurich D-INFK, Universitaetstr. 6, CH-8092 Zurich. Attn: Systems Group.
8 */
9
10#ifndef AHCI_DEV_H_
11#define AHCI_DEV_H_
12
13#include <stdbool.h>
14#include <errors/errno.h>
15#include <dev/ahci_hba_dev.h>
16#include <dev/ahci_port_dev.h>
17#include <dev/ata_identify_dev.h>
18
19void ahci_hba_reset(ahci_hba_t* controller);
20void ahci_hba_irq_enable(ahci_hba_t* controller);
21void ahci_hba_irq_disable(ahci_hba_t* controller);
22uint32_t ahci_hba_get_num_ports(ahci_hba_t* controller);
23errval_t ahci_hba_init(ahci_hba_t* controller);
24uint32_t ahci_hba_get_command_slots(ahci_hba_t* controller);
25bool ahci_port_is_implemented(ahci_hba_t* controller, size_t port);
26uint32_t ahci_port_probe(ahci_port_t* port);
27
28void ahci_port_start(ahci_port_t* port);
29void ahci_port_stop(ahci_port_t* port);
30bool ahci_port_is_running(ahci_port_t* port);
31bool ahci_port_is_idle(ahci_port_t* port);
32bool ahci_port_is_functional(ahci_port_t* port);
33bool ahci_port_is_ready(ahci_port_t* port);
34size_t ahci_port_offset(uint32_t port);
35bool ahci_port_slot_free(ahci_port_t* port, uint8_t slot);
36
37void ahci_port_print_identification(ata_identify_t *id);
38
39#endif // AHCI_DEV_H_
40