10Sstevel@tonic-gate /* 20Sstevel@tonic-gate * CDDL HEADER START 30Sstevel@tonic-gate * 40Sstevel@tonic-gate * The contents of this file are subject to the terms of the 55352Ssvemuri * Common Development and Distribution License (the "License"). 65352Ssvemuri * You may not use this file except in compliance with the License. 70Sstevel@tonic-gate * 80Sstevel@tonic-gate * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 90Sstevel@tonic-gate * or http://www.opensolaris.org/os/licensing. 100Sstevel@tonic-gate * See the License for the specific language governing permissions 110Sstevel@tonic-gate * and limitations under the License. 120Sstevel@tonic-gate * 130Sstevel@tonic-gate * When distributing Covered Code, include this CDDL HEADER in each 140Sstevel@tonic-gate * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 150Sstevel@tonic-gate * If applicable, add the following below this CDDL HEADER, with the 160Sstevel@tonic-gate * fields enclosed by brackets "[]" replaced with your own identifying 170Sstevel@tonic-gate * information: Portions Copyright [yyyy] [name of copyright owner] 180Sstevel@tonic-gate * 190Sstevel@tonic-gate * CDDL HEADER END 200Sstevel@tonic-gate */ 21*6057Sraf 220Sstevel@tonic-gate /* 23*6057Sraf * Copyright 2008 Sun Microsystems, Inc. All rights reserved. 240Sstevel@tonic-gate * Use is subject to license terms. 250Sstevel@tonic-gate */ 260Sstevel@tonic-gate 270Sstevel@tonic-gate #pragma ident "%Z%%M% %I% %E% SMI" 280Sstevel@tonic-gate 290Sstevel@tonic-gate #include <sys/atomic.h> 300Sstevel@tonic-gate 310Sstevel@tonic-gate /* 320Sstevel@tonic-gate * This file exists only for the purpose of running lint. 330Sstevel@tonic-gate */ 340Sstevel@tonic-gate 350Sstevel@tonic-gate #if defined(__lint) 360Sstevel@tonic-gate 370Sstevel@tonic-gate void 380Sstevel@tonic-gate atomic_inc_8(volatile uint8_t *target) 390Sstevel@tonic-gate { (*target)++; } 400Sstevel@tonic-gate 410Sstevel@tonic-gate void 420Sstevel@tonic-gate atomic_inc_uchar(volatile uchar_t *target) 430Sstevel@tonic-gate { (*target)++; } 440Sstevel@tonic-gate 450Sstevel@tonic-gate void 460Sstevel@tonic-gate atomic_inc_16(volatile uint16_t *target) 470Sstevel@tonic-gate { (*target)++; } 480Sstevel@tonic-gate 490Sstevel@tonic-gate void 500Sstevel@tonic-gate atomic_inc_ushort(volatile ushort_t *target) 510Sstevel@tonic-gate { (*target)++; } 520Sstevel@tonic-gate 530Sstevel@tonic-gate void 540Sstevel@tonic-gate atomic_inc_32(volatile uint32_t *target) 550Sstevel@tonic-gate { (*target)++; } 560Sstevel@tonic-gate 570Sstevel@tonic-gate void 580Sstevel@tonic-gate atomic_inc_uint(volatile uint_t *target) 590Sstevel@tonic-gate { (*target)++; } 600Sstevel@tonic-gate 610Sstevel@tonic-gate void 620Sstevel@tonic-gate atomic_inc_ulong(volatile ulong_t *target) 630Sstevel@tonic-gate { (*target)++; } 640Sstevel@tonic-gate 650Sstevel@tonic-gate void 660Sstevel@tonic-gate atomic_inc_64(volatile uint64_t *target) 670Sstevel@tonic-gate { (*target)++; } 680Sstevel@tonic-gate 690Sstevel@tonic-gate void 700Sstevel@tonic-gate atomic_dec_8(volatile uint8_t *target) 710Sstevel@tonic-gate { (*target)--; } 720Sstevel@tonic-gate 730Sstevel@tonic-gate void 740Sstevel@tonic-gate atomic_dec_uchar(volatile uchar_t *target) 750Sstevel@tonic-gate { (*target)--; } 760Sstevel@tonic-gate 770Sstevel@tonic-gate void 780Sstevel@tonic-gate atomic_dec_16(volatile uint16_t *target) 790Sstevel@tonic-gate { (*target)--; } 800Sstevel@tonic-gate 810Sstevel@tonic-gate void 820Sstevel@tonic-gate atomic_dec_ushort(volatile ushort_t *target) 830Sstevel@tonic-gate { (*target)--; } 840Sstevel@tonic-gate 850Sstevel@tonic-gate void 860Sstevel@tonic-gate atomic_dec_32(volatile uint32_t *target) 870Sstevel@tonic-gate { (*target)--; } 880Sstevel@tonic-gate 890Sstevel@tonic-gate void 900Sstevel@tonic-gate atomic_dec_uint(volatile uint_t *target) 910Sstevel@tonic-gate { (*target)--; } 920Sstevel@tonic-gate 930Sstevel@tonic-gate void 940Sstevel@tonic-gate atomic_dec_ulong(volatile ulong_t *target) 950Sstevel@tonic-gate { (*target)--; } 960Sstevel@tonic-gate 970Sstevel@tonic-gate void 980Sstevel@tonic-gate atomic_dec_64(volatile uint64_t *target) 990Sstevel@tonic-gate { (*target)--; } 1000Sstevel@tonic-gate 1010Sstevel@tonic-gate void 1020Sstevel@tonic-gate atomic_add_8(volatile uint8_t *target, int8_t value) 1030Sstevel@tonic-gate { *target += value; } 1040Sstevel@tonic-gate 1050Sstevel@tonic-gate void 1060Sstevel@tonic-gate atomic_add_char(volatile uchar_t *target, signed char value) 1070Sstevel@tonic-gate { *target += value; } 1080Sstevel@tonic-gate 1090Sstevel@tonic-gate void 1100Sstevel@tonic-gate atomic_add_16(volatile uint16_t *target, int16_t delta) 1110Sstevel@tonic-gate { *target += delta; } 1120Sstevel@tonic-gate 1130Sstevel@tonic-gate void 1140Sstevel@tonic-gate atomic_add_ushort(volatile ushort_t *target, short value) 1150Sstevel@tonic-gate { *target += value; } 1160Sstevel@tonic-gate 1170Sstevel@tonic-gate void 1180Sstevel@tonic-gate atomic_add_32(volatile uint32_t *target, int32_t delta) 1190Sstevel@tonic-gate { *target += delta; } 1200Sstevel@tonic-gate 1210Sstevel@tonic-gate void 1220Sstevel@tonic-gate atomic_add_ptr(volatile void *target, ssize_t value) 1230Sstevel@tonic-gate { *(caddr_t *)target += value; } 1240Sstevel@tonic-gate 1250Sstevel@tonic-gate void 1260Sstevel@tonic-gate atomic_add_long(volatile ulong_t *target, long delta) 1270Sstevel@tonic-gate { *target += delta; } 1280Sstevel@tonic-gate 1290Sstevel@tonic-gate void 1300Sstevel@tonic-gate atomic_add_64(volatile uint64_t *target, int64_t delta) 1310Sstevel@tonic-gate { *target += delta; } 1320Sstevel@tonic-gate 1330Sstevel@tonic-gate void 1340Sstevel@tonic-gate atomic_or_8(volatile uint8_t *target, uint8_t bits) 1350Sstevel@tonic-gate { *target |= bits; } 1360Sstevel@tonic-gate 1370Sstevel@tonic-gate void 1380Sstevel@tonic-gate atomic_or_uchar(volatile uchar_t *target, uchar_t bits) 1390Sstevel@tonic-gate { *target |= bits; } 1400Sstevel@tonic-gate 1410Sstevel@tonic-gate void 1420Sstevel@tonic-gate atomic_or_16(volatile uint16_t *target, uint16_t bits) 1430Sstevel@tonic-gate { *target |= bits; } 1440Sstevel@tonic-gate 1450Sstevel@tonic-gate void 1460Sstevel@tonic-gate atomic_or_ushort(volatile ushort_t *target, ushort_t bits) 1470Sstevel@tonic-gate { *target |= bits; } 1480Sstevel@tonic-gate 1490Sstevel@tonic-gate void 1500Sstevel@tonic-gate atomic_or_32(volatile uint32_t *target, uint32_t bits) 1510Sstevel@tonic-gate { *target |= bits; } 1520Sstevel@tonic-gate 1530Sstevel@tonic-gate void 1540Sstevel@tonic-gate atomic_or_uint(volatile uint_t *target, uint_t bits) 1550Sstevel@tonic-gate { *target |= bits; } 1560Sstevel@tonic-gate 1570Sstevel@tonic-gate void 1580Sstevel@tonic-gate atomic_or_ulong(volatile ulong_t *target, ulong_t bits) 1590Sstevel@tonic-gate { *target |= bits; } 1600Sstevel@tonic-gate 1610Sstevel@tonic-gate void 1620Sstevel@tonic-gate atomic_or_64(volatile uint64_t *target, uint64_t bits) 1630Sstevel@tonic-gate { *target |= bits; } 1640Sstevel@tonic-gate 1650Sstevel@tonic-gate void 1660Sstevel@tonic-gate atomic_and_8(volatile uint8_t *target, uint8_t bits) 1670Sstevel@tonic-gate { *target &= bits; } 1680Sstevel@tonic-gate 1690Sstevel@tonic-gate void 1700Sstevel@tonic-gate atomic_and_uchar(volatile uchar_t *target, uchar_t bits) 1710Sstevel@tonic-gate { *target &= bits; } 1720Sstevel@tonic-gate 1730Sstevel@tonic-gate void 1740Sstevel@tonic-gate atomic_and_16(volatile uint16_t *target, uint16_t bits) 1750Sstevel@tonic-gate { *target &= bits; } 1760Sstevel@tonic-gate 1770Sstevel@tonic-gate void 1780Sstevel@tonic-gate atomic_and_ushort(volatile ushort_t *target, ushort_t bits) 1790Sstevel@tonic-gate { *target &= bits; } 1800Sstevel@tonic-gate 1810Sstevel@tonic-gate void 1820Sstevel@tonic-gate atomic_and_32(volatile uint32_t *target, uint32_t bits) 1830Sstevel@tonic-gate { *target &= bits; } 1840Sstevel@tonic-gate 1850Sstevel@tonic-gate void 1860Sstevel@tonic-gate atomic_and_uint(volatile uint_t *target, uint_t bits) 1870Sstevel@tonic-gate { *target &= bits; } 1880Sstevel@tonic-gate 1890Sstevel@tonic-gate void 1900Sstevel@tonic-gate atomic_and_ulong(volatile ulong_t *target, ulong_t bits) 1910Sstevel@tonic-gate { *target &= bits; } 1920Sstevel@tonic-gate 1930Sstevel@tonic-gate void 1940Sstevel@tonic-gate atomic_and_64(volatile uint64_t *target, uint64_t bits) 1950Sstevel@tonic-gate { *target &= bits; } 1960Sstevel@tonic-gate 1970Sstevel@tonic-gate uint8_t 1980Sstevel@tonic-gate atomic_inc_8_nv(volatile uint8_t *target) 1990Sstevel@tonic-gate { return (++(*target)); } 2000Sstevel@tonic-gate 2010Sstevel@tonic-gate uchar_t 2020Sstevel@tonic-gate atomic_inc_uchar_nv(volatile uchar_t *target) 2030Sstevel@tonic-gate { return (++(*target)); } 2040Sstevel@tonic-gate 2050Sstevel@tonic-gate uint16_t 2060Sstevel@tonic-gate atomic_inc_16_nv(volatile uint16_t *target) 2070Sstevel@tonic-gate { return (++(*target)); } 2080Sstevel@tonic-gate 2090Sstevel@tonic-gate ushort_t 2100Sstevel@tonic-gate atomic_inc_ushort_nv(volatile ushort_t *target) 2110Sstevel@tonic-gate { return (++(*target)); } 2120Sstevel@tonic-gate 2130Sstevel@tonic-gate uint32_t 2140Sstevel@tonic-gate atomic_inc_32_nv(volatile uint32_t *target) 2150Sstevel@tonic-gate { return (++(*target)); } 2160Sstevel@tonic-gate 2170Sstevel@tonic-gate uint_t 2180Sstevel@tonic-gate atomic_inc_uint_nv(volatile uint_t *target) 2190Sstevel@tonic-gate { return (++(*target)); } 2200Sstevel@tonic-gate 2210Sstevel@tonic-gate ulong_t 2220Sstevel@tonic-gate atomic_inc_ulong_nv(volatile ulong_t *target) 2230Sstevel@tonic-gate { return (++(*target)); } 2240Sstevel@tonic-gate 2250Sstevel@tonic-gate uint64_t 2260Sstevel@tonic-gate atomic_inc_64_nv(volatile uint64_t *target) 2270Sstevel@tonic-gate { return (++(*target)); } 2280Sstevel@tonic-gate 2290Sstevel@tonic-gate uint8_t 2300Sstevel@tonic-gate atomic_dec_8_nv(volatile uint8_t *target) 2310Sstevel@tonic-gate { return (--(*target)); } 2320Sstevel@tonic-gate 2330Sstevel@tonic-gate uchar_t 2340Sstevel@tonic-gate atomic_dec_uchar_nv(volatile uchar_t *target) 2350Sstevel@tonic-gate { return (--(*target)); } 2360Sstevel@tonic-gate 2370Sstevel@tonic-gate uint16_t 2380Sstevel@tonic-gate atomic_dec_16_nv(volatile uint16_t *target) 2390Sstevel@tonic-gate { return (--(*target)); } 2400Sstevel@tonic-gate 2410Sstevel@tonic-gate ushort_t 2420Sstevel@tonic-gate atomic_dec_ushort_nv(volatile ushort_t *target) 2430Sstevel@tonic-gate { return (--(*target)); } 2440Sstevel@tonic-gate 2450Sstevel@tonic-gate uint32_t 2460Sstevel@tonic-gate atomic_dec_32_nv(volatile uint32_t *target) 2470Sstevel@tonic-gate { return (--(*target)); } 2480Sstevel@tonic-gate 2490Sstevel@tonic-gate uint_t 2500Sstevel@tonic-gate atomic_dec_uint_nv(volatile uint_t *target) 2510Sstevel@tonic-gate { return (--(*target)); } 2520Sstevel@tonic-gate 2530Sstevel@tonic-gate ulong_t 2540Sstevel@tonic-gate atomic_dec_ulong_nv(volatile ulong_t *target) 2550Sstevel@tonic-gate { return (--(*target)); } 2560Sstevel@tonic-gate 2570Sstevel@tonic-gate uint64_t 2580Sstevel@tonic-gate atomic_dec_64_nv(volatile uint64_t *target) 2590Sstevel@tonic-gate { return (--(*target)); } 2600Sstevel@tonic-gate 2610Sstevel@tonic-gate uint8_t 2620Sstevel@tonic-gate atomic_add_8_nv(volatile uint8_t *target, int8_t value) 2630Sstevel@tonic-gate { return (*target += value); } 2640Sstevel@tonic-gate 2650Sstevel@tonic-gate uchar_t 2660Sstevel@tonic-gate atomic_add_char_nv(volatile uchar_t *target, signed char value) 2670Sstevel@tonic-gate { return (*target += value); } 2680Sstevel@tonic-gate 2690Sstevel@tonic-gate uint16_t 2700Sstevel@tonic-gate atomic_add_16_nv(volatile uint16_t *target, int16_t delta) 2710Sstevel@tonic-gate { return (*target += delta); } 2720Sstevel@tonic-gate 2730Sstevel@tonic-gate ushort_t 2740Sstevel@tonic-gate atomic_add_short_nv(volatile ushort_t *target, short value) 2750Sstevel@tonic-gate { return (*target += value); } 2760Sstevel@tonic-gate 2770Sstevel@tonic-gate uint32_t 2780Sstevel@tonic-gate atomic_add_32_nv(volatile uint32_t *target, int32_t delta) 2790Sstevel@tonic-gate { return (*target += delta); } 2800Sstevel@tonic-gate 2810Sstevel@tonic-gate uint_t 2820Sstevel@tonic-gate atomic_add_int_nv(volatile uint_t *target, int delta) 2830Sstevel@tonic-gate { return (*target += delta); } 2840Sstevel@tonic-gate 2850Sstevel@tonic-gate void * 2860Sstevel@tonic-gate atomic_add_ptr_nv(volatile void *target, ssize_t value) 2870Sstevel@tonic-gate { return (*(caddr_t *)target += value); } 2880Sstevel@tonic-gate 2890Sstevel@tonic-gate ulong_t 2900Sstevel@tonic-gate atomic_add_long_nv(volatile ulong_t *target, long delta) 2910Sstevel@tonic-gate { return (*target += delta); } 2920Sstevel@tonic-gate 2930Sstevel@tonic-gate uint64_t 2940Sstevel@tonic-gate atomic_add_64_nv(volatile uint64_t *target, int64_t delta) 2950Sstevel@tonic-gate { return (*target += delta); } 2960Sstevel@tonic-gate 2970Sstevel@tonic-gate uint8_t 2980Sstevel@tonic-gate atomic_or_8_nv(volatile uint8_t *target, uint8_t value) 2990Sstevel@tonic-gate { return (*target |= value); } 3000Sstevel@tonic-gate 3010Sstevel@tonic-gate uchar_t 3020Sstevel@tonic-gate atomic_or_uchar_nv(volatile uchar_t *target, uchar_t value) 3030Sstevel@tonic-gate { return (*target |= value); } 3040Sstevel@tonic-gate 3050Sstevel@tonic-gate uint16_t 3060Sstevel@tonic-gate atomic_or_16_nv(volatile uint16_t *target, uint16_t value) 3070Sstevel@tonic-gate { return (*target |= value); } 3080Sstevel@tonic-gate 3090Sstevel@tonic-gate ushort_t 3100Sstevel@tonic-gate atomic_or_ushort_nv(volatile ushort_t *target, ushort_t value) 3110Sstevel@tonic-gate { return (*target |= value); } 3120Sstevel@tonic-gate 3130Sstevel@tonic-gate uint32_t 3140Sstevel@tonic-gate atomic_or_32_nv(volatile uint32_t *target, uint32_t value) 3150Sstevel@tonic-gate { return (*target |= value); } 3160Sstevel@tonic-gate 3170Sstevel@tonic-gate uint_t 3180Sstevel@tonic-gate atomic_or_uint_nv(volatile uint_t *target, uint_t value) 3190Sstevel@tonic-gate { return (*target |= value); } 3200Sstevel@tonic-gate 3210Sstevel@tonic-gate ulong_t 3220Sstevel@tonic-gate atomic_or_ulong_nv(volatile ulong_t *target, ulong_t value) 3230Sstevel@tonic-gate { return (*target |= value); } 3240Sstevel@tonic-gate 3250Sstevel@tonic-gate uint64_t 3260Sstevel@tonic-gate atomic_or_64_nv(volatile uint64_t *target, uint64_t value) 3270Sstevel@tonic-gate { return (*target |= value); } 3280Sstevel@tonic-gate 3290Sstevel@tonic-gate uint8_t 3300Sstevel@tonic-gate atomic_and_8_nv(volatile uint8_t *target, uint8_t value) 3310Sstevel@tonic-gate { return (*target &= value); } 3320Sstevel@tonic-gate 3330Sstevel@tonic-gate uchar_t 3340Sstevel@tonic-gate atomic_and_uchar_nv(volatile uchar_t *target, uchar_t value) 3350Sstevel@tonic-gate { return (*target &= value); } 3360Sstevel@tonic-gate 3370Sstevel@tonic-gate uint16_t 3380Sstevel@tonic-gate atomic_and_16_nv(volatile uint16_t *target, uint16_t value) 3390Sstevel@tonic-gate { return (*target &= value); } 3400Sstevel@tonic-gate 3410Sstevel@tonic-gate ushort_t 3420Sstevel@tonic-gate atomic_and_ushort_nv(volatile ushort_t *target, ushort_t value) 3430Sstevel@tonic-gate { return (*target &= value); } 3440Sstevel@tonic-gate 3450Sstevel@tonic-gate uint32_t 3460Sstevel@tonic-gate atomic_and_32_nv(volatile uint32_t *target, uint32_t value) 3470Sstevel@tonic-gate { return (*target &= value); } 3480Sstevel@tonic-gate 3490Sstevel@tonic-gate uint_t 3500Sstevel@tonic-gate atomic_and_uint_nv(volatile uint_t *target, uint_t value) 3510Sstevel@tonic-gate { return (*target &= value); } 3520Sstevel@tonic-gate 3530Sstevel@tonic-gate ulong_t 3540Sstevel@tonic-gate atomic_and_ulong_nv(volatile ulong_t *target, ulong_t value) 3550Sstevel@tonic-gate { return (*target &= value); } 3560Sstevel@tonic-gate 3570Sstevel@tonic-gate uint64_t 3580Sstevel@tonic-gate atomic_and_64_nv(volatile uint64_t *target, uint64_t value) 3590Sstevel@tonic-gate { return (*target &= value); } 3600Sstevel@tonic-gate 3610Sstevel@tonic-gate uint8_t 3620Sstevel@tonic-gate atomic_cas_8(volatile uint8_t *target, uint8_t cmp, uint8_t new) 3630Sstevel@tonic-gate { 3640Sstevel@tonic-gate uint8_t old = *target; 3650Sstevel@tonic-gate if (old == cmp) 3660Sstevel@tonic-gate *target = new; 3670Sstevel@tonic-gate return (old); 3680Sstevel@tonic-gate } 3690Sstevel@tonic-gate 3700Sstevel@tonic-gate uchar_t 3710Sstevel@tonic-gate atomic_cas_uchar(volatile uchar_t *target, uchar_t cmp, uchar_t new) 3720Sstevel@tonic-gate { 3730Sstevel@tonic-gate uchar_t old = *target; 3740Sstevel@tonic-gate if (old == cmp) 3750Sstevel@tonic-gate *target = new; 3760Sstevel@tonic-gate return (old); 3770Sstevel@tonic-gate } 3780Sstevel@tonic-gate 3790Sstevel@tonic-gate uint16_t 3800Sstevel@tonic-gate atomic_cas_16(volatile uint16_t *target, uint16_t cmp, uint16_t new) 3810Sstevel@tonic-gate { 3820Sstevel@tonic-gate uint16_t old = *target; 3830Sstevel@tonic-gate if (old == cmp) 3840Sstevel@tonic-gate *target = new; 3850Sstevel@tonic-gate return (old); 3860Sstevel@tonic-gate } 3870Sstevel@tonic-gate 3880Sstevel@tonic-gate ushort_t 3890Sstevel@tonic-gate atomic_cas_ushort(volatile ushort_t *target, ushort_t cmp, ushort_t new) 3900Sstevel@tonic-gate { 3910Sstevel@tonic-gate ushort_t old = *target; 3920Sstevel@tonic-gate if (old == cmp) 3930Sstevel@tonic-gate *target = new; 3940Sstevel@tonic-gate return (old); 3950Sstevel@tonic-gate } 3960Sstevel@tonic-gate 3970Sstevel@tonic-gate uint32_t 3980Sstevel@tonic-gate atomic_cas_32(volatile uint32_t *target, uint32_t cmp, uint32_t new) 3990Sstevel@tonic-gate { 4000Sstevel@tonic-gate uint32_t old = *target; 4010Sstevel@tonic-gate if (old == cmp) 4020Sstevel@tonic-gate *target = new; 4030Sstevel@tonic-gate return (old); 4040Sstevel@tonic-gate } 4050Sstevel@tonic-gate 4060Sstevel@tonic-gate uint_t 4070Sstevel@tonic-gate atomic_cas_uint(volatile uint_t *target, uint_t cmp, uint_t new) 4080Sstevel@tonic-gate { 4090Sstevel@tonic-gate uint_t old = *target; 4100Sstevel@tonic-gate if (old == cmp) 4110Sstevel@tonic-gate *target = new; 4120Sstevel@tonic-gate return (old); 4130Sstevel@tonic-gate } 4140Sstevel@tonic-gate 4150Sstevel@tonic-gate ulong_t 4160Sstevel@tonic-gate atomic_cas_ulong(volatile ulong_t *target, ulong_t cmp, ulong_t new) 4170Sstevel@tonic-gate { 4180Sstevel@tonic-gate ulong_t old = *target; 4190Sstevel@tonic-gate if (old == cmp) 4200Sstevel@tonic-gate *target = new; 4210Sstevel@tonic-gate return (old); 4220Sstevel@tonic-gate } 4230Sstevel@tonic-gate 4240Sstevel@tonic-gate uint64_t 425*6057Sraf atomic_cas_64(volatile uint64_t *target, uint64_t cmp, uint64_t new) 4260Sstevel@tonic-gate { 4270Sstevel@tonic-gate uint64_t old = *target; 4280Sstevel@tonic-gate if (old == cmp) 4290Sstevel@tonic-gate *target = new; 4300Sstevel@tonic-gate return (old); 4310Sstevel@tonic-gate } 4320Sstevel@tonic-gate 4330Sstevel@tonic-gate void * 4340Sstevel@tonic-gate atomic_cas_ptr(volatile void *target, void *cmp, void *new) 4350Sstevel@tonic-gate { 4360Sstevel@tonic-gate void *old = *(void **)target; 4370Sstevel@tonic-gate if (old == cmp) 4380Sstevel@tonic-gate *(void **)target = new; 4390Sstevel@tonic-gate return (old); 4400Sstevel@tonic-gate } 4410Sstevel@tonic-gate 4420Sstevel@tonic-gate uint8_t 4430Sstevel@tonic-gate atomic_swap_8(volatile uint8_t *target, uint8_t new) 4440Sstevel@tonic-gate { 4450Sstevel@tonic-gate uint8_t old = *target; 4460Sstevel@tonic-gate *target = new; 4470Sstevel@tonic-gate return (old); 4480Sstevel@tonic-gate } 4490Sstevel@tonic-gate 4500Sstevel@tonic-gate uchar_t 4510Sstevel@tonic-gate atomic_swap_char(volatile uchar_t *target, uchar_t new) 4520Sstevel@tonic-gate { 4530Sstevel@tonic-gate uchar_t old = *target; 4540Sstevel@tonic-gate *target = new; 4550Sstevel@tonic-gate return (old); 4560Sstevel@tonic-gate } 4570Sstevel@tonic-gate 4580Sstevel@tonic-gate uint16_t 4590Sstevel@tonic-gate atomic_swap_16(volatile uint16_t *target, uint16_t new) 4600Sstevel@tonic-gate { 4610Sstevel@tonic-gate uint16_t old = *target; 4620Sstevel@tonic-gate *target = new; 4630Sstevel@tonic-gate return (old); 4640Sstevel@tonic-gate } 4650Sstevel@tonic-gate 4660Sstevel@tonic-gate ushort_t 4670Sstevel@tonic-gate atomic_swap_ushort(volatile ushort_t *target, ushort_t new) 4680Sstevel@tonic-gate { 4690Sstevel@tonic-gate ushort_t old = *target; 4700Sstevel@tonic-gate *target = new; 4710Sstevel@tonic-gate return (old); 4720Sstevel@tonic-gate } 4730Sstevel@tonic-gate 4740Sstevel@tonic-gate uint32_t 4750Sstevel@tonic-gate atomic_swap_32(volatile uint32_t *target, uint32_t new) 4760Sstevel@tonic-gate { 4770Sstevel@tonic-gate uint32_t old = *target; 4780Sstevel@tonic-gate *target = new; 4790Sstevel@tonic-gate return (old); 4800Sstevel@tonic-gate } 4810Sstevel@tonic-gate 4820Sstevel@tonic-gate uint_t 4830Sstevel@tonic-gate atomic_swap_uint(volatile uint_t *target, uint_t new) 4840Sstevel@tonic-gate { 4855352Ssvemuri uint_t old = *target; 4860Sstevel@tonic-gate *target = new; 4870Sstevel@tonic-gate return (old); 4880Sstevel@tonic-gate } 4890Sstevel@tonic-gate 4900Sstevel@tonic-gate uint64_t 4910Sstevel@tonic-gate atomic_swap_64(volatile uint64_t *target, uint64_t new) 4920Sstevel@tonic-gate { 4930Sstevel@tonic-gate uint64_t old = *target; 4940Sstevel@tonic-gate *target = new; 4950Sstevel@tonic-gate return (old); 4960Sstevel@tonic-gate } 4970Sstevel@tonic-gate 4980Sstevel@tonic-gate void * 4990Sstevel@tonic-gate atomic_swap_ptr(volatile void *target, void *new) 5000Sstevel@tonic-gate { 5010Sstevel@tonic-gate void *old = *(void **)target; 5020Sstevel@tonic-gate *(void **)target = new; 5030Sstevel@tonic-gate return (old); 5040Sstevel@tonic-gate } 5050Sstevel@tonic-gate 5060Sstevel@tonic-gate ulong_t 5070Sstevel@tonic-gate atomic_swap_ulong(volatile ulong_t *target, ulong_t new) 5080Sstevel@tonic-gate { 5090Sstevel@tonic-gate ulong_t old = *target; 5100Sstevel@tonic-gate *target = new; 5110Sstevel@tonic-gate return (old); 5120Sstevel@tonic-gate } 5130Sstevel@tonic-gate 5140Sstevel@tonic-gate int 5150Sstevel@tonic-gate atomic_set_long_excl(volatile ulong_t *target, uint_t value) 5160Sstevel@tonic-gate { 5170Sstevel@tonic-gate ulong_t bit = (1UL << value); 5180Sstevel@tonic-gate if ((*target & bit) != 0) 5190Sstevel@tonic-gate return (-1); 5200Sstevel@tonic-gate *target |= bit; 5210Sstevel@tonic-gate return (0); 5220Sstevel@tonic-gate } 5230Sstevel@tonic-gate 5240Sstevel@tonic-gate int 5250Sstevel@tonic-gate atomic_clear_long_excl(volatile ulong_t *target, uint_t value) 5260Sstevel@tonic-gate { 5270Sstevel@tonic-gate ulong_t bit = (1UL << value); 5280Sstevel@tonic-gate if ((*target & bit) == 0) 5290Sstevel@tonic-gate return (-1); 5300Sstevel@tonic-gate *target &= ~bit; 5310Sstevel@tonic-gate return (0); 5320Sstevel@tonic-gate } 5330Sstevel@tonic-gate 5340Sstevel@tonic-gate #if !defined(_KERNEL) 5350Sstevel@tonic-gate 5360Sstevel@tonic-gate void 5370Sstevel@tonic-gate membar_enter(void) 5380Sstevel@tonic-gate {} 5390Sstevel@tonic-gate 5400Sstevel@tonic-gate void 5410Sstevel@tonic-gate membar_exit(void) 5420Sstevel@tonic-gate {} 5430Sstevel@tonic-gate 5440Sstevel@tonic-gate void 5450Sstevel@tonic-gate membar_producer(void) 5460Sstevel@tonic-gate {} 5470Sstevel@tonic-gate 5480Sstevel@tonic-gate void 5490Sstevel@tonic-gate membar_consumer(void) 5500Sstevel@tonic-gate {} 5510Sstevel@tonic-gate 5520Sstevel@tonic-gate #endif /* _KERNEL */ 5530Sstevel@tonic-gate 5540Sstevel@tonic-gate #endif /* __lint */ 555