17c478bd9Sstevel@tonic-gate /* 27c478bd9Sstevel@tonic-gate * CDDL HEADER START 37c478bd9Sstevel@tonic-gate * 47c478bd9Sstevel@tonic-gate * The contents of this file are subject to the terms of the 57c478bd9Sstevel@tonic-gate * Common Development and Distribution License, Version 1.0 only 67c478bd9Sstevel@tonic-gate * (the "License"). You may not use this file except in compliance 77c478bd9Sstevel@tonic-gate * with the License. 87c478bd9Sstevel@tonic-gate * 97c478bd9Sstevel@tonic-gate * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 107c478bd9Sstevel@tonic-gate * or http://www.opensolaris.org/os/licensing. 117c478bd9Sstevel@tonic-gate * See the License for the specific language governing permissions 127c478bd9Sstevel@tonic-gate * and limitations under the License. 137c478bd9Sstevel@tonic-gate * 147c478bd9Sstevel@tonic-gate * When distributing Covered Code, include this CDDL HEADER in each 157c478bd9Sstevel@tonic-gate * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 167c478bd9Sstevel@tonic-gate * If applicable, add the following below this CDDL HEADER, with the 177c478bd9Sstevel@tonic-gate * fields enclosed by brackets "[]" replaced with your own identifying 187c478bd9Sstevel@tonic-gate * information: Portions Copyright [yyyy] [name of copyright owner] 197c478bd9Sstevel@tonic-gate * 207c478bd9Sstevel@tonic-gate * CDDL HEADER END 217c478bd9Sstevel@tonic-gate */ 227c478bd9Sstevel@tonic-gate /* 237c478bd9Sstevel@tonic-gate * Copyright (c) 2001 by Sun Microsystems, Inc. 247c478bd9Sstevel@tonic-gate * All rights reserved. 257c478bd9Sstevel@tonic-gate */ 267c478bd9Sstevel@tonic-gate 277c478bd9Sstevel@tonic-gate #ifndef _SYS_PCI_AXQ_H 287c478bd9Sstevel@tonic-gate #define _SYS_PCI_AXQ_H 297c478bd9Sstevel@tonic-gate 307c478bd9Sstevel@tonic-gate #include <sys/types.h> 317c478bd9Sstevel@tonic-gate #include <sys/atomic.h> 327c478bd9Sstevel@tonic-gate 337c478bd9Sstevel@tonic-gate #ifdef __cplusplus 347c478bd9Sstevel@tonic-gate extern "C" { 357c478bd9Sstevel@tonic-gate #endif 367c478bd9Sstevel@tonic-gate 377c478bd9Sstevel@tonic-gate #define PIO_LIMIT_ENTER(p) { \ 387c478bd9Sstevel@tonic-gate int n;\ 397c478bd9Sstevel@tonic-gate for (;;) {\ 407c478bd9Sstevel@tonic-gate do {\ 417c478bd9Sstevel@tonic-gate n = p->pbm_pio_counter;\ 427c478bd9Sstevel@tonic-gate } while (n <= 0);\ 43*1a5e258fSJosef 'Jeff' Sipek if (atomic_dec_32_nv(\ 44*1a5e258fSJosef 'Jeff' Sipek (uint_t *)&p->pbm_pio_counter)\ 457c478bd9Sstevel@tonic-gate == (n - 1))\ 467c478bd9Sstevel@tonic-gate break;\ 47*1a5e258fSJosef 'Jeff' Sipek atomic_inc_32(\ 48*1a5e258fSJosef 'Jeff' Sipek (uint_t *)&p->pbm_pio_counter);\ 497c478bd9Sstevel@tonic-gate }\ 507c478bd9Sstevel@tonic-gate } 517c478bd9Sstevel@tonic-gate 527c478bd9Sstevel@tonic-gate 537c478bd9Sstevel@tonic-gate 54*1a5e258fSJosef 'Jeff' Sipek #define PIO_LIMIT_EXIT(p) atomic_inc_32((uint_t *)&p->pbm_pio_counter); 557c478bd9Sstevel@tonic-gate 567c478bd9Sstevel@tonic-gate extern void pci_axq_setup(ddi_map_req_t *mp, pbm_t *pbm_p); 577c478bd9Sstevel@tonic-gate extern void pci_axq_pio_limit(pbm_t *pbm_p); 587c478bd9Sstevel@tonic-gate 597c478bd9Sstevel@tonic-gate #ifdef __cplusplus 607c478bd9Sstevel@tonic-gate } 617c478bd9Sstevel@tonic-gate #endif 627c478bd9Sstevel@tonic-gate 637c478bd9Sstevel@tonic-gate #endif /* _SYS_PCI_AXQ_H */ 64