|
|
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 <cpu.h> ! 14: #include <stdint.h> ! 15: #include <hw.h> ! 16: ! 17: uint16_t ! 18: bswap16_load(uint64_t addr) ! 19: { ! 20: unsigned int val; ! 21: set_ci(); ! 22: asm volatile ("lhbrx %0, 0, %1":"=r" (val):"r"(addr)); ! 23: clr_ci(); ! 24: return val; ! 25: } ! 26: ! 27: uint32_t ! 28: bswap32_load(uint64_t addr) ! 29: { ! 30: unsigned int val; ! 31: set_ci(); ! 32: asm volatile ("lwbrx %0, 0, %1":"=r" (val):"r"(addr)); ! 33: clr_ci(); ! 34: return val; ! 35: } ! 36: ! 37: void ! 38: bswap16_store(uint64_t addr, uint16_t val) ! 39: { ! 40: set_ci(); ! 41: asm volatile ("sthbrx %0, 0, %1"::"r" (val), "r"(addr)); ! 42: clr_ci(); ! 43: } ! 44: ! 45: void ! 46: bswap32_store(uint64_t addr, uint32_t val) ! 47: { ! 48: set_ci(); ! 49: asm volatile ("stwbrx %0, 0, %1"::"r" (val), "r"(addr)); ! 50: clr_ci(); ! 51: } ! 52: ! 53: uint8_t ! 54: load8_ci(uint64_t addr) ! 55: { ! 56: uint8_t val; ! 57: set_ci(); ! 58: val = *(uint8_t *) addr; ! 59: clr_ci(); ! 60: return val; ! 61: } ! 62: ! 63: uint16_t ! 64: load16_ci(uint64_t addr) ! 65: { ! 66: uint16_t val; ! 67: set_ci(); ! 68: val = *(uint16_t *) addr; ! 69: clr_ci(); ! 70: return val; ! 71: } ! 72: ! 73: uint32_t ! 74: load32_ci(uint64_t addr) ! 75: { ! 76: uint32_t val; ! 77: set_ci(); ! 78: val = *(uint32_t *) addr; ! 79: clr_ci(); ! 80: return val; ! 81: } ! 82: ! 83: uint64_t ! 84: load64_ci(uint64_t addr) ! 85: { ! 86: uint64_t val; ! 87: set_ci(); ! 88: val = *(uint64_t *) addr; ! 89: clr_ci(); ! 90: return val; ! 91: } ! 92: ! 93: ! 94: void ! 95: store8_ci(uint64_t addr, uint8_t val) ! 96: { ! 97: set_ci(); ! 98: *(uint8_t *) addr = val; ! 99: clr_ci(); ! 100: } ! 101: ! 102: void ! 103: store16_ci(uint64_t addr, uint16_t val) ! 104: { ! 105: set_ci(); ! 106: *(uint16_t *) addr = val; ! 107: clr_ci(); ! 108: } ! 109: ! 110: void ! 111: store32_ci(uint64_t addr, uint32_t val) ! 112: { ! 113: set_ci(); ! 114: *(uint32_t *) addr = val; ! 115: clr_ci(); ! 116: } ! 117: ! 118: void ! 119: store64_ci(uint64_t addr, uint64_t val) ! 120: { ! 121: set_ci(); ! 122: *(uint64_t *) addr = val; ! 123: clr_ci(); ! 124: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.