|
|
1.1 ! root 1: /****************************************************************************** ! 2: * Copyright (c) 2004, 2008 IBM Corporation ! 3: * All rights reserved. ! 4: * This program and the accompanying materials ! 5: * are made available under the terms of the BSD License ! 6: * which accompanies this distribution, and is available at ! 7: * http://www.opensource.org/licenses/bsd-license.php ! 8: * ! 9: * Contributors: ! 10: * IBM Corporation - initial implementation ! 11: *****************************************************************************/ ! 12: ! 13: #include <rtas.h> ! 14: #include <of.h> ! 15: #include <pci.h> ! 16: #include <string.h> ! 17: #include <kernel.h> ! 18: #include <cpu.h> ! 19: #include <cache.h> ! 20: ! 21: int ! 22: pci_calc_bar_size(long long puid, int bus, int devfn, int bar) ! 23: { ! 24: int size; ! 25: int old; ! 26: bar = bar * 4 + 0x10; ! 27: old = rtas_pci_config_read(puid, 4, bus, devfn, bar); ! 28: rtas_pci_config_write(puid, 4, bus, devfn, bar, 0xffffffff); ! 29: size = (rtas_pci_config_read(puid, 4, bus, devfn, bar) & (-4)) * -1; ! 30: rtas_pci_config_write(puid, 4, bus, devfn, bar, old); ! 31: return size; ! 32: } ! 33: ! 34: int ! 35: pci_get_bar_start(long long puid, int bus, int devfn, int bar) ! 36: { ! 37: return rtas_pci_config_read(puid, 4, bus, devfn, bar * 4 + 0x10); ! 38: } ! 39: ! 40: void ! 41: pci_set_bar_start(long long puid, int bus, int devfn, int bar, int value) ! 42: { ! 43: rtas_pci_config_write(puid, 4, bus, devfn, bar * 4 + 0x10, value); ! 44: } ! 45: ! 46: unsigned int ! 47: read_io(void *addr, size_t sz) ! 48: { ! 49: unsigned int ret; ! 50: ! 51: switch (sz) { ! 52: case 1: ! 53: ret = ci_read_8(addr); ! 54: break; ! 55: case 2: ! 56: ret = ci_read_16(addr); ! 57: break; ! 58: case 4: ! 59: ret = ci_read_32(addr); ! 60: break; ! 61: default: ! 62: ret = 0; ! 63: } ! 64: ! 65: return ret; ! 66: } ! 67: ! 68: int ! 69: write_io(void *addr, unsigned int value, size_t sz) ! 70: { ! 71: switch (sz) { ! 72: case 1: ! 73: ci_write_8(addr, value); ! 74: break; ! 75: case 2: ! 76: ci_write_16(addr, value); ! 77: break; ! 78: case 4: ! 79: ci_write_32(addr, value); ! 80: break; ! 81: default: ! 82: return -1; ! 83: } ! 84: ! 85: return 0; ! 86: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.