1*4f8ce3b3Sriastradh/* $NetBSD: membar_ops.S,v 1.9 2022/04/09 23:32:51 riastradh Exp $ */ 2fb900ec9Sad 3fb900ec9Sad/*- 4fb900ec9Sad * Copyright (c) 2006, 2007 The NetBSD Foundation, Inc. 5fb900ec9Sad * All rights reserved. 6fb900ec9Sad * 7fb900ec9Sad * This code is derived from software contributed to The NetBSD Foundation 8fb900ec9Sad * by Jason R. Thorpe. 9fb900ec9Sad * 10fb900ec9Sad * Redistribution and use in source and binary forms, with or without 11fb900ec9Sad * modification, are permitted provided that the following conditions 12fb900ec9Sad * are met: 13fb900ec9Sad * 1. Redistributions of source code must retain the above copyright 14fb900ec9Sad * notice, this list of conditions and the following disclaimer. 15fb900ec9Sad * 2. Redistributions in binary form must reproduce the above copyright 16fb900ec9Sad * notice, this list of conditions and the following disclaimer in the 17fb900ec9Sad * documentation and/or other materials provided with the distribution. 18fb900ec9Sad * 19fb900ec9Sad * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS 20fb900ec9Sad * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 21fb900ec9Sad * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 22fb900ec9Sad * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS 23fb900ec9Sad * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 24fb900ec9Sad * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 25fb900ec9Sad * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 26fb900ec9Sad * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 27fb900ec9Sad * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 28fb900ec9Sad * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 29fb900ec9Sad * POSSIBILITY OF SUCH DAMAGE. 30fb900ec9Sad */ 31fb900ec9Sad 32fb900ec9Sad#include "atomic_op_asm.h" 33fb900ec9Sad 34fb900ec9Sad .text 35fb900ec9Sad 362d0314d3Sad#ifdef _KERNEL 372d0314d3Sad 38fb900ec9Sad/* 39fb900ec9Sad * We start out with no-op versions that do nothing. We hot-patch when 40fb900ec9Sad * we detect a MP system. 41fb900ec9Sad */ 426740bb54SchsLEAF(_membar_producer, 0) 43fb900ec9Sad RET 44fb900ec9Sad nop 45fb900ec9SadEND(_membar_producer) 46fb900ec9SadEXPORT(_membar_producer_end) 47fb900ec9Sad 486740bb54SchsLEAF(_membar_sync, 0) 49fb900ec9Sad RET 50fb900ec9Sad nop 51fb900ec9SadEND(_membar_sync) 52fb900ec9SadEXPORT(_membar_sync_end) 53131790b4Smatt 546740bb54SchsLEAF(_membar_producer_mp, 0) 55*4f8ce3b3Sriastradh wmb /* store-before-store */ 56fb900ec9Sad RET 57fb900ec9SadEND(_membar_producer_mp) 58fb900ec9SadEXPORT(_membar_producer_mp_end) 59fb900ec9Sad 606740bb54SchsLEAF(_membar_sync_mp, 0) 61*4f8ce3b3Sriastradh mb /* load/store-before-load/store */ 62fb900ec9Sad RET 63fb900ec9SadEND(_membar_sync_mp) 64fb900ec9SadEXPORT(_membar_sync_mp_end) 65fb900ec9Sad 662d0314d3Sad#else /* _KERNEL */ 672d0314d3Sad 686740bb54SchsLEAF(_membar_producer, 0) 69*4f8ce3b3Sriastradh mb /* load/store-before-load/store */ 702d0314d3Sad RET 712d0314d3SadEND(_membar_producer) 722d0314d3SadEXPORT(_membar_producer_end) 732d0314d3Sad 746740bb54SchsLEAF(_membar_sync, 0) 75*4f8ce3b3Sriastradh mb /* load/store-before-load/store */ 762d0314d3Sad RET 772d0314d3SadEND(_membar_sync) 782d0314d3SadEXPORT(_membar_sync_end) 792d0314d3Sad 80fb900ec9Sad#endif /* _KERNEL */ 812d0314d3Sad 822d0314d3SadATOMIC_OP_ALIAS(membar_producer,_membar_producer) 832d0314d3SadATOMIC_OP_ALIAS(membar_sync,_membar_sync) 84*4f8ce3b3Sriastradh 85*4f8ce3b3SriastradhATOMIC_OP_ALIAS(membar_acquire,_membar_sync) 86*4f8ce3b3SriastradhSTRONG_ALIAS(_membar_acquire,_membar_sync) 87*4f8ce3b3SriastradhATOMIC_OP_ALIAS(membar_release,_membar_sync) 88*4f8ce3b3SriastradhSTRONG_ALIAS(_membar_release,_membar_sync) 892d0314d3SadATOMIC_OP_ALIAS(membar_enter,_membar_sync) 902d0314d3SadSTRONG_ALIAS(_membar_enter,_membar_sync) 912d0314d3SadATOMIC_OP_ALIAS(membar_exit,_membar_sync) 922d0314d3SadSTRONG_ALIAS(_membar_exit,_membar_sync) 932d0314d3SadATOMIC_OP_ALIAS(membar_consumer,_membar_sync) 942d0314d3SadSTRONG_ALIAS(_membar_consumer,_membar_sync) 95fe3ead6aSriastradhATOMIC_OP_ALIAS(membar_datadep_consumer,_membar_sync) 96fe3ead6aSriastradhSTRONG_ALIAS(_membar_datadep_consumer,_membar_sync) 97