00001 /* $Id: generic_io.idl 29635 2007-08-20 12:21:25Z ch12 $ */ 00002 /*****************************************************************************/ 00011 /* (c) 2007 Technische Universitaet Dresden 00012 * This file is part of DROPS, which is distributed under the terms of the 00013 * GNU General Public License 2. Please see the COPYING file for details. 00014 */ 00015 00016 import <l4/sys/types.h> 00017 00018 #if 0 00019 /* XXX DICE lacks bitarrays? */ 00020 typedef struct l4_io_drv { 00021 unsigned src:2; 00022 unsigned dsi:8; 00023 unsigned drv_class:8; 00024 unsigned padding:14; 00025 } l4_io_drv_t; 00026 #else 00027 00030 typedef unsigned long l4_io_drv_t; 00031 #endif 00032 00033 const unsigned l4_io_max_fpages = 32; 00034 00038 typedef struct l4_io_res { 00039 unsigned long start; 00040 unsigned long end; 00041 unsigned long flags; 00042 } l4_io_res_t; 00043 00047 typedef unsigned short l4_io_pdev_t; 00048 00052 typedef struct l4_io_pci_dev { 00053 byte bus; /* PCI bus number */ 00054 byte devfn; /* encoded device & function index */ 00055 unsigned short vendor; 00056 unsigned short device; 00057 unsigned short sub_vendor; 00058 unsigned short sub_device; 00059 unsigned long dev_class; /* 3 bytes: (base,sub,prog-if) */ 00060 00061 unsigned long irq; 00062 #define MAX_PCIDEV_RES 12 00063 l4_io_res_t res[MAX_PCIDEV_RES]; 00064 /* resource regions used by device: 00065 * 0-5 standard PCI regions (base addresses) 00066 * 6 expansion ROM 00067 * 7-10 unused for devices */ 00068 char name[80]; 00069 char slot_name[8]; 00070 00071 l4_io_pdev_t handle; /* handle for this device */ 00072 } l4_io_pci_dev_t; 00073 00077 library l4 00078 { 00082 interface io 00083 { 00091 /***********************************************************************/ 00099 /***********************************************************************/ 00100 long register_client([in] l4_io_drv_t type); 00101 00102 /***********************************************************************/ 00112 /***********************************************************************/ 00113 long unregister_client(l4_threadid_t client); 00114 00115 /***********************************************************************/ 00123 /***********************************************************************/ 00124 long map_info([out] fpage *info); 00136 /***********************************************************************/ 00152 /***********************************************************************/ 00153 long request_region([in] l4_uint16_t addr, [in] l4_uint16_t len, 00154 [out] l4_size_t *num, 00155 [out, size_is(num), max_is(l4_io_max_fpages), prealloc_client] fpage regions[]); 00156 00157 /***********************************************************************/ 00164 /***********************************************************************/ 00165 long release_region([in] l4_uint16_t addr, [in] l4_uint16_t len); 00166 00167 /***********************************************************************/ 00184 /***********************************************************************/ 00185 long request_mem_region([in] unsigned long addr, 00186 [in] unsigned long len, 00187 [in] unsigned long flags, 00188 [out] fpage *region); 00189 00190 /***********************************************************************/ 00203 /***********************************************************************/ 00204 long search_mem_region([in] unsigned long addr, 00205 [out] unsigned long *start, 00206 [out] l4_size_t *len); 00207 00208 /***********************************************************************/ 00219 /***********************************************************************/ 00220 long release_mem_region([in] unsigned long addr, [in] unsigned long len); 00221 00222 /***********************************************************************/ 00230 /***********************************************************************/ 00231 long request_dma([in] unsigned long channel); 00232 00233 /***********************************************************************/ 00239 /***********************************************************************/ 00240 long release_dma([in] unsigned long channel); 00241 00242 /***********************************************************************/ 00249 /***********************************************************************/ 00250 long release_client([in] l4_threadid_t client); 00251 00252 00263 /***********************************************************************/ 00274 /***********************************************************************/ 00275 long pci_find_slot([in] unsigned long bus, [in] unsigned long slot, 00276 [out] l4_io_pci_dev_t *pci_dev); 00277 00278 /***********************************************************************/ 00290 /***********************************************************************/ 00291 long pci_find_device([in] unsigned short vendor_id, 00292 [in] unsigned short device_id, 00293 [in] l4_io_pdev_t start_at, 00294 [out] l4_io_pci_dev_t *pci_dev); 00295 00296 /***********************************************************************/ 00307 /***********************************************************************/ 00308 long pci_find_class([in] unsigned long class_id, 00309 [in] l4_io_pdev_t start_at, 00310 [out] l4_io_pci_dev_t *pci_dev); 00311 00312 /***********************************************************************/ 00320 /***********************************************************************/ 00321 long pci_enable_device([in] l4_io_pdev_t pdev); 00322 00323 /***********************************************************************/ 00331 /***********************************************************************/ 00332 long pci_disable_device([in] l4_io_pdev_t pdev); 00333 00334 /***********************************************************************/ 00342 /***********************************************************************/ 00343 long pci_set_master([in] l4_io_pdev_t pdev); 00344 00345 /***********************************************************************/ 00356 /***********************************************************************/ 00357 long pci_set_power_state([in] l4_io_pdev_t pdev, [in, out] int *state); 00358 00359 /***********************************************************************/ 00371 /***********************************************************************/ 00372 long pci_read_config_byte([in] l4_io_pdev_t pdev, [in] long offset, 00373 [out] byte *val); 00374 00375 /***********************************************************************/ 00386 /***********************************************************************/ 00387 long pci_read_config_word([in] l4_io_pdev_t pdev, 00388 [in] long offset, [out] l4_uint16_t *val); 00389 00390 /***********************************************************************/ 00401 /***********************************************************************/ 00402 long pci_read_config_dword([in] l4_io_pdev_t pdev, 00403 [in] long offset, [out] l4_uint32_t *val); 00404 00405 /***********************************************************************/ 00415 /***********************************************************************/ 00416 long pci_write_config_byte([in] l4_io_pdev_t pdev, [in] long offset, 00417 [in] byte val); 00418 00419 /***********************************************************************/ 00429 /***********************************************************************/ 00430 long pci_write_config_word([in] l4_io_pdev_t pdev, 00431 [in] long offset, [in] unsigned short val); 00432 00433 /***********************************************************************/ 00443 /***********************************************************************/ 00444 long pci_write_config_dword([in] l4_io_pdev_t pdev, 00445 [in] long offset, [in] unsigned long val); 00447 }; 00448 };