diff options
author | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2018-04-23 12:50:58 +0200 |
---|---|---|
committer | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2018-04-23 15:18:45 +0200 |
commit | 5a4e3dc0a5af631b1723858bc50a9af1545392fb (patch) | |
tree | f2825a86e99fbf1982fc484278483a03728ccc3a /c/src/lib/libbsp/i386/shared/pci/pci_io.c | |
parent | bsps/sh: Move console.c to bsps (diff) | |
download | rtems-5a4e3dc0a5af631b1723858bc50a9af1545392fb.tar.bz2 |
bsps: Move PCI drivers to bsps
This patch is a part of the BSP source reorganization.
Update #3285.
Diffstat (limited to 'c/src/lib/libbsp/i386/shared/pci/pci_io.c')
-rw-r--r-- | c/src/lib/libbsp/i386/shared/pci/pci_io.c | 213 |
1 files changed, 0 insertions, 213 deletions
diff --git a/c/src/lib/libbsp/i386/shared/pci/pci_io.c b/c/src/lib/libbsp/i386/shared/pci/pci_io.c deleted file mode 100644 index b6cd1005f0..0000000000 --- a/c/src/lib/libbsp/i386/shared/pci/pci_io.c +++ /dev/null @@ -1,213 +0,0 @@ -/** - * @file - * - * PCI Support when Configuration Space is in I/O - */ - -/* - * COPYRIGHT (c) 2016. - * On-Line Applications Research Corporation (OAR). - * - * The license and distribution terms for this file may be - * found in the file LICENSE in this distribution or at - * http://www.rtems.org/license/LICENSE. - */ - -#include <rtems.h> -#include <bsp.h> -#include <bsp/bspimpl.h> - -static int pci_io_initialized = 0; - -/* - * Forward reference. Initialized at bottom. - */ -static const pci_config_access_functions pci_io_indirect_functions; - -/* - * Detects presense of PCI Configuration is in I/O space. If so, return - * pointer to accessor methods. - * - * NOTE: TBD to determine if (a) PCI Bus exists and (b) this is the - * access method. - */ -const pci_config_access_functions *pci_io_initialize(void) -{ - pci_io_initialized = 1; - - printk( "PCI I/O Support Initialized\n" ); - - return &pci_io_indirect_functions; -} - -/* - * Build PCI Address - */ -static inline uint32_t pci_io_build_address( - uint16_t bus, - uint16_t slot, - uint16_t function, - uint16_t offset -) -{ - uint32_t bus_u32 = (uint32_t)bus; - uint32_t slot_u32 = (uint32_t)slot; - uint32_t function_u32 = (uint32_t)function; - uint32_t address; - - /* - * create configuration address as per figure at - * http://wiki.osdev.org/PCI#Configuration_Space_Access_Mechanism_.231 - */ - address = (uint32_t) 0x80000000; /* Bit 31 - Enable Bit */ - /* Bits 30-24 - Reserved */ - address |= bus_u32 << 16; /* Bits 23-16 - Bus Number */ - address |= slot_u32 << 11; /* Bits 15-11 - Device/Slot Number */ - address |= function_u32 << 8; /* Bits 10-8 - Function Number */ - address |= offset & 0xfc; /* Bits 7-2 - Offset/Register Number */ - /* Bits 1-0 - Reserved 0 */ - return address; -} - -static int BSP_pci_read_config_byte( - unsigned char bus, - unsigned char slot, - unsigned char function, - unsigned char offset, - unsigned char *value -) -{ - uint32_t address; - uint32_t tmp; - - address = pci_io_build_address( bus, slot, function, offset ); - - /* write out the address */ - outport_long(0xCF8, address); - - /* read in the data */ - inport_long(0xCFC, tmp); - - /* (offset & 3) * 8) = 0 will choose the first byte of the 32 bits register */ - *value = (uint16_t)(tmp >> ((offset & 3) * 8)) & 0xff; - return PCIBIOS_SUCCESSFUL; -} - -static int BSP_pci_read_config_word( - unsigned char bus, - unsigned char slot, - unsigned char function, - unsigned char offset, - unsigned short *value -) -{ - uint32_t address; - uint32_t tmp; - - address = pci_io_build_address( bus, slot, function, offset ); - - /* write out the address */ - outport_long(0xCF8, address); - - /* read in the data */ - inport_long(0xCFC, tmp); - - /* (offset & 2) * 8) = 0 will choose the first word of the 32 bits register */ - *value = (uint16_t)(tmp >> ((offset & 2) * 8)) & 0xffff; - return PCIBIOS_SUCCESSFUL; -} - -static int BSP_pci_read_config_dword( - unsigned char bus, - unsigned char slot, - unsigned char function, - unsigned char offset, - uint32_t *value -) -{ - uint32_t address; - uint32_t tmp; - - address = pci_io_build_address( bus, slot, function, offset ); - - /* write out the address */ - outport_long(0xCF8, address); - - /* read in the data */ - inport_long(0xCFC, tmp); - - *value = tmp; - return PCIBIOS_SUCCESSFUL; -} - -static int BSP_pci_write_config_byte( - unsigned char bus, - unsigned char slot, - unsigned char function, - unsigned char offset, - unsigned char value -) -{ - uint32_t address; - - address = pci_io_build_address( bus, slot, function, offset ); - - /* write out the address */ - outport_long(0xCF8, address); - - /* read in the data */ - outport_byte(0xCFC, value); - - return PCIBIOS_SUCCESSFUL; -} - -static int BSP_pci_write_config_word( - unsigned char bus, - unsigned char slot, - unsigned char function, - unsigned char offset, - unsigned short value -) -{ - uint32_t address; - - address = pci_io_build_address( bus, slot, function, offset ); - - /* write out the address */ - outport_long(0xCF8, address); - - /* read in the data */ - outport_word(0xCFC, value); - - return PCIBIOS_SUCCESSFUL; -} - -static int BSP_pci_write_config_dword( - unsigned char bus, - unsigned char slot, - unsigned char function, - unsigned char offset, - uint32_t value -) -{ - uint32_t address; - - address = pci_io_build_address( bus, slot, function, offset ); - - /* write out the address */ - outport_long(0xCF8, address); - - /* read in the data */ - outport_long(0xCFC, value); - - return PCIBIOS_SUCCESSFUL; -} - -static const pci_config_access_functions pci_io_indirect_functions = { - BSP_pci_read_config_byte, - BSP_pci_read_config_word, - BSP_pci_read_config_dword, - BSP_pci_write_config_byte, - BSP_pci_write_config_word, - BSP_pci_write_config_dword -}; |