1/* 2 * Copyright (c) 2007, 2008, 2009, 2010, 2011 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, Universitaetstrasse 6, CH-8092 Zurich. Attn: Systems Group. 8 */ 9 10interface pci "The PCI Interface" { 11 typedef uint32 caps_per_bar[6]; // 6 == PCI_NBARS 12 13 /* Init PCI device */ 14 rpc init_pci_device(in uint32 class_code, 15 in uint32 sub_class, 16 in uint32 prog_if, 17 in uint32 vendor_id, 18 in uint32 device_id, 19 in uint32 bus, 20 in uint32 dev, 21 in uint32 fun, 22 out errval err, 23 out uint8 nr_allocated_bars // Number of bars supported 24 ); 25 26 /* Init legacy IO device */ 27 rpc init_legacy_device(in uint16 iomin, 28 in uint16 iomax, 29 in uint8 irq, 30 in uint8 coreid, // core ID for interrupt handler 31 in uint32 vector,// interrupt vector (0 == no interrupt) 32 out errval err, 33 out cap iocap); 34 35 /* request a bar cap for a previously-initialised device */ 36 rpc get_bar_cap(in uint32 idx, 37 out errval err, 38 out cap cap, 39 out uint8 type, 40 out uint8 bar_nr); 41 42 rpc get_vf_bar_cap(in uint32 vf_num, 43 in uint32 idx, 44 out cap cap, 45 out errval err); 46 47 rpc get_vf_iommu_endpoint_cap(in uint32 vf_num, 48 in uint8 type, 49 out cap cap, 50 out errval err); 51 52 rpc get_vf_pci_endpoint_cap(in uint32 vf_num, 53 in uint8 type, 54 out cap cap, 55 out errval err); 56 57 /* request an irq cap for a previously-initialised device */ 58 rpc get_irq_cap(in uint16 idx, out errval err, out cap cap); 59 60 /* reregister interrupt for a previously-initialized device */ 61 rpc reregister_interrupt(in uint32 class_code, 62 in uint32 sub_class, 63 in uint32 prog_if, 64 in uint32 vendor_id, 65 in uint32 device_id, 66 in uint32 bus, 67 in uint32 dev, 68 in uint32 fun, 69 in uint8 coreid, // core ID for interrupt handler 70 in uint32 vector, // interrupt vector (0 == no interrupt) 71 out errval err); 72 73 /* Kludge: retrieve frame cap to VBE BIOS 74 rpc get_vbe_bios_cap(out errval err, out cap cap, out uint32 size); 75 rpc reset(out errval err); 76 rpc sleep(in int state, out errval err); */ 77 78 /* read PCI conf header */ 79 rpc read_conf_header(in uint32 dword, out errval err, out uint32 val); 80 81 /* write PCI conf header */ 82 rpc write_conf_header(in uint32 dword, in uint32 val, out errval err); 83 84 /* enable a VF */ 85 rpc sriov_enable_vf(in uint32 vf_num, out errval err); 86 87 /* Enable (legacy) interrupt */ 88 rpc irq_enable(out errval err); 89 90 /* Enable MSI-X for the specified PCI device. */ 91 rpc msix_enable_addr(in uint8 bus, in uint8 dev, in uint8 fn, 92 out errval err, 93 out uint16 vec_count); 94 rpc msix_enable(out errval err, 95 out uint16 vec_count); 96 97 /* Configure specified MSI-X vector */ 98 rpc msix_vector_init_addr(in uint8 bus, in uint8 dev, in uint8 fn, 99 in uint16 idx, /* Index of MSI-X vector */ 100 in uint8 destination, /* Interrupt Destination */ 101 in uint8 vector, /* Interrupt Vector */ 102 out errval err); 103 rpc msix_vector_init(in uint16 idx, /* Index of MSI-X vector */ 104 in uint8 destination, /* Interrupt Destination */ 105 in uint8 vector, /* Interrupt Vector */ 106 out errval err); 107 108 /* Get the device pci addr as well as vendor and device id*/ 109 rpc get_device_addr(out uint32 bus, out uint32 dev, out uint32 fn, out uint32 vendor, 110 out uint32 devid); 111 112 /* Get nodeid for the cards view of the system */ 113 rpc get_nodeid(out int32 nodeid); 114}; 115