root/src/add-ons/kernel/bus_managers/pci/pci_msi.h
/*
 *      Copyright 2013, Jérôme Duval, korli@users.berlios.de.
 *      Copyright 2010, Michael Lotz, mmlr@mlotz.ch. All Rights Reserved.
 *      Distributed under the terms of the MIT License.
 */
#ifndef _PCI_x86_MSI_H
#define _PCI_x86_MSI_H

#include <OS.h>
#include <SupportDefs.h>


// Message Signaled Interrupts


// MSI
typedef struct msi_info {
        bool    msi_capable;
        uint8   capability_offset;
        uint32  message_count;
        uint32  configured_count;
        uint32  start_vector;
        uint16  control_value;
        uint32  data_value;
        uint64  address_value;
} msi_info;


// MSI-X
typedef struct msix_info {
        bool    msix_capable;
        uint8   capability_offset;
        uint32  message_count;
        uint8   table_bar;
        uint32  table_offset;
        area_id table_area_id;
        addr_t  table_address;
        uint8   pba_bar;
        uint32  pba_offset;
        area_id pba_area_id;
        addr_t  pba_address;
        uint32  configured_count;
        uint32  start_vector;
        uint16  control_value;
        uint32  data_value;
        uint64  address_value;
} msix_info;


// HyperTransport MSI mapping
typedef struct ht_mapping_info {
        bool    ht_mapping_capable;
        uint8   capability_offset;
        uint16  control_value;
        uint64  address_value;
} ht_mapping_info;


#endif // _PCI_x86_MSI_H