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