Annotation of qemu/roms/ipxe/src/drivers/bus/pcibackup.c, revision 1.1.1.1

1.1       root        1: /*
                      2:  * Copyright (C) 2009 Michael Brown <[email protected]>.
                      3:  *
                      4:  * This program is free software; you can redistribute it and/or
                      5:  * modify it under the terms of the GNU General Public License as
                      6:  * published by the Free Software Foundation; either version 2 of the
                      7:  * License, or any later version.
                      8:  *
                      9:  * This program is distributed in the hope that it will be useful, but
                     10:  * WITHOUT ANY WARRANTY; without even the implied warranty of
                     11:  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
                     12:  * General Public License for more details.
                     13:  *
                     14:  * You should have received a copy of the GNU General Public License
                     15:  * along with this program; if not, write to the Free Software
                     16:  * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
                     17:  */
                     18: 
                     19: FILE_LICENCE ( GPL2_OR_LATER );
                     20: 
                     21: #include <stdint.h>
                     22: #include <ipxe/pci.h>
                     23: #include <ipxe/pcibackup.h>
                     24: 
                     25: /** @file
                     26:  *
                     27:  * PCI configuration space backup and restoration
                     28:  *
                     29:  */
                     30: 
                     31: /**
                     32:  * Check PCI configuration space offset against exclusion list
                     33:  *
                     34:  * @v pci              PCI device
                     35:  * @v offset           Offset within PCI configuration space
                     36:  * @v exclude          PCI configuration space backup exclusion list, or NULL
                     37:  */
                     38: static int
                     39: pci_backup_excluded ( struct pci_device *pci, unsigned int offset,
                     40:                      const uint8_t *exclude ) {
                     41: 
                     42:        if ( ! exclude )
                     43:                return 0;
                     44:        for ( ; *exclude != PCI_CONFIG_BACKUP_EXCLUDE_END ; exclude++ ) {
                     45:                if ( offset == *exclude ) {
                     46:                        DBGC ( pci, "PCI %p skipping configuration offset "
                     47:                               "%02x\n", pci, offset );
                     48:                        return 1;
                     49:                }
                     50:        }
                     51:        return 0;
                     52: }
                     53: 
                     54: /**
                     55:  * Back up PCI configuration space
                     56:  *
                     57:  * @v pci              PCI device
                     58:  * @v backup           PCI configuration space backup
                     59:  * @v exclude          PCI configuration space backup exclusion list, or NULL
                     60:  */
                     61: void pci_backup ( struct pci_device *pci, struct pci_config_backup *backup,
                     62:                  const uint8_t *exclude ) {
                     63:        unsigned int offset;
                     64:        uint32_t *dword;
                     65: 
                     66:        for ( offset = 0, dword = backup->dwords ; offset < 0x100 ;
                     67:              offset += sizeof ( *dword ) , dword++ ) {
                     68:                if ( ! pci_backup_excluded ( pci, offset, exclude ) )
                     69:                        pci_read_config_dword ( pci, offset, dword );
                     70:        }
                     71: }
                     72: 
                     73: /**
                     74:  * Restore PCI configuration space
                     75:  *
                     76:  * @v pci              PCI device
                     77:  * @v backup           PCI configuration space backup
                     78:  * @v exclude          PCI configuration space backup exclusion list, or NULL
                     79:  */
                     80: void pci_restore ( struct pci_device *pci, struct pci_config_backup *backup,
                     81:                   const uint8_t *exclude ) {
                     82:        unsigned int offset;
                     83:        uint32_t *dword;
                     84: 
                     85:        for ( offset = 0, dword = backup->dwords ; offset < 0x100 ;
                     86:              offset += sizeof ( *dword ) , dword++ ) {
                     87:                if ( ! pci_backup_excluded ( pci, offset, exclude ) )
                     88:                        pci_write_config_dword ( pci, offset, *dword );
                     89:        }
                     90: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.