⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pci.h

📁 eCos操作系统源码
💻 H
📖 第 1 页 / 共 2 页
字号:
// This function gets the PCI configuration information for the// device indicated in devid. The common fields of the cyg_pci_device// structure, and the appropriate fields of the relevant header union// member are filled in from the device's configuration space. If the// device has not been enabled, then this function will also fetch// the size and type information from the base address registers and// place it in the base_size[] array.externC void cyg_pci_get_device_info ( cyg_pci_device_id devid,                                         cyg_pci_device *dev_info );// This function sets the PCI configuration information for the// device indicated in devid. Only the configuration space registers// that are writable are actually written. Once all the fields have// been written, the device info will be read back into *dev_info, so// that it reflects the true state of the hardware.externC void cyg_pci_set_device_info ( cyg_pci_device_id devid,                                        cyg_pci_device *dev_info );//------------------------------------------------------------------------// Device find functions// Searches the PCI bus configuration space for a device with the// given vendor and device ids. The search starts at the device// pointed to by devid, or at the first slot if it contains// CYG_PCI_NULL_DEVID. *devid will be updated with the ID of the next// device found. Returns true if one is found and false if not.externC cyg_bool cyg_pci_find_device( cyg_uint16 vendor, cyg_uint16 device,                                      cyg_pci_device_id *devid );// Searches the PCI bus configuration space for a device with the// given class code.  The search starts at the device pointed to by// devid, or at the first slot if it contains CYG_PCI_NULL_DEVID.// *devid will be updated with the ID of the next device found.// Returns true if one is found and false if not.externC cyg_bool cyg_pci_find_class( cyg_uint32 dev_class,                                     cyg_pci_device_id *devid );// Searches the PCI bus configuration space for a device whose properties// match those required by the match_func, which the user supplies.  The// match_func's arguments are vendor, device, class exactly as they might// be in the two APIs above.  The additional parameter is for any state// which a caller might wish available to its callback routine.// The search starts at the device pointed to by// devid, or at the first slot if it contains CYG_PCI_NULL_DEVID.  *devid// will be updated with the ID of the next device found.  Returns true if// one is found and false if not.typedef cyg_bool (cyg_pci_match_func)( cyg_uint16,/* vendor */                                       cyg_uint16,/* device */                                       cyg_uint32,/* class  */                                       void * /* arbitrary user data */ );externC cyg_bool cyg_pci_find_matching( cyg_pci_match_func *matchp,                                        void * match_callback_data,                                        cyg_pci_device_id *devid );// Searches the PCI configuration space for the next valid device// after cur_devid. If cur_devid is given the value// CYG_PCI_NULL_DEVID, then the search starts at the first slot. It// is permitted for next_devid to point to the cur_devid.  Returns// true if another device is found and false if not.externC cyg_bool cyg_pci_find_next( cyg_pci_device_id cur_devid,                                     cyg_pci_device_id *next_devid );//------------------------------------------------------------------------// Resource Allocation// These routines allocate memory and IO space to PCI devices.// Allocate memory and IO space to all base address registers using// the current memory and IO base addresses in the library. If// dev_info does not contain valid base_size[] entries, then the// result is false.externC cyg_bool cyg_pci_configure_device( cyg_pci_device *dev_info );// Allocate memory and IO space for all devices found on the given// bus and its subordinate busses. This routine recurses when a// PCI-to-PCI bridge is encountered. The next_bus argument points// to a variable holding the bus number of the next PCI bus to// be allocated when a bridge is encountered. This routine returns// true if successful, false if unsuccessful.externC cyg_bool cyg_pci_configure_bus( cyg_uint8 bus,					cyg_uint8 *next_bus );// These routines set the base addresses for memory and IO mappings// to be used by the memory allocation routines. Normally these base// addresses will be set to default values based on the platform,// these routines allow those to be changed by application code if// necessary.externC void cyg_pci_set_memory_base( CYG_PCI_ADDRESS64 base );externC void cyg_pci_set_io_base( CYG_PCI_ADDRESS32 base );// These routines allocate memory or IO space to the base address// register indicated by bar. The base address in *base will be// correctly aligned and the address of the next free location will// be written back into it if the allocation succeeds. If the base// address register is of the wrong type for this allocation, or// dev_info does not contain valid base_size[] entries, the result is// false.externC cyg_bool cyg_pci_allocate_memory( cyg_pci_device *dev_info,                                          cyg_uint32 bar,                                           CYG_PCI_ADDRESS64 *base );externC cyg_bool cyg_pci_allocate_io( cyg_pci_device *dev_info,                                      cyg_uint32 bar,                                       CYG_PCI_ADDRESS32 *base );// Translate the device's PCI interrupt (INTA#-INTD#) to the// associated HAL vector. This may also depend on which slot the// device occupies. If the device may generate interrupts, the// translated vector number will be stored in vec and the result is// true. Otherwise the result is false.externC cyg_bool cyg_pci_translate_interrupt( cyg_pci_device *dev_info,                                              CYG_ADDRWORD *vec );//----------------------------------------------------------------------// Specific device configuration access functions// Read functions// These functions read registers of the appropriate size from the// configuration space of the given device. They should mainly be// used to access registers that are device specific. General PCI// registers are best accessed through cyg_pci_get_device_info().externC void cyg_pci_read_config_uint8( cyg_pci_device_id devid,                                        cyg_uint8 offset, cyg_uint8 *val);externC void cyg_pci_read_config_uint16( cyg_pci_device_id devid,                                         cyg_uint8 offset, cyg_uint16 *val);externC void cyg_pci_read_config_uint32( cyg_pci_device_id devid,                                         cyg_uint8 offset, cyg_uint32 *val);// Write functions// These functions write registers of the appropriate size to the// configuration space of the given device. They should mainly be// used to access registers that are device specific. General PCI// registers are best accessed through// cyg_pci_get_device_info(). Writing the general registers this way// may render the contents of a cyg_pci_device structure invalid.externC void cyg_pci_write_config_uint8( cyg_pci_device_id devid,                                         cyg_uint8 offset, cyg_uint8 val);externC void cyg_pci_write_config_uint16( cyg_pci_device_id devid,                                          cyg_uint8 offset, cyg_uint16 val);externC void cyg_pci_write_config_uint32( cyg_pci_device_id devid,                                          cyg_uint8 offset, cyg_uint32 val);//----------------------------------------------------------------------// Functions private to the PCI library. These should only be used by// tests.externC cyg_bool cyg_pci_allocate_memory_priv(cyg_pci_device *dev_info,                                              cyg_uint32 bar,                                              CYG_PCI_ADDRESS64 *base,                                             CYG_PCI_ADDRESS64 *assigned_addr);externC cyg_bool cyg_pci_allocate_io_priv( cyg_pci_device *dev_info,                                           cyg_uint32 bar,                                            CYG_PCI_ADDRESS32 *base,                                           CYG_PCI_ADDRESS32 *assigned_addr);//----------------------------------------------------------------------// Bus probing limits.// Note: these can be overridden by the platform#ifndef CYG_PCI_MAX_BUS#define CYG_PCI_MAX_BUS                      8  // Eight is enough?#endif#ifndef CYG_PCI_MAX_DEV#define CYG_PCI_MAX_DEV                      32#endif#ifndef CYG_PCI_MIN_DEV#define CYG_PCI_MIN_DEV                      0#endif#ifndef CYG_PCI_MAX_FN#define CYG_PCI_MAX_FN                       8#endif#ifndef CYG_PCI_MAX_BAR#define CYG_PCI_MAX_BAR                      6#endif//-----------------------------------------------------------------------------#endif // ifndef CYGONCE_PCI_H// End of pci.h

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -