1*c2e0c6b5SAndroid Build Coastguard Worker /* 2*c2e0c6b5SAndroid Build Coastguard Worker * The PCI Library -- Access to i386 I/O ports on DJGPP 3*c2e0c6b5SAndroid Build Coastguard Worker * 4*c2e0c6b5SAndroid Build Coastguard Worker * Copyright (c) 2010, 2017 Rudolf Marek <[email protected]> 5*c2e0c6b5SAndroid Build Coastguard Worker * 6*c2e0c6b5SAndroid Build Coastguard Worker * Can be freely distributed and used under the terms of the GNU GPL v2+ 7*c2e0c6b5SAndroid Build Coastguard Worker * 8*c2e0c6b5SAndroid Build Coastguard Worker * SPDX-License-Identifier: GPL-2.0-or-later 9*c2e0c6b5SAndroid Build Coastguard Worker */ 10*c2e0c6b5SAndroid Build Coastguard Worker 11*c2e0c6b5SAndroid Build Coastguard Worker #include <dos.h> 12*c2e0c6b5SAndroid Build Coastguard Worker 13*c2e0c6b5SAndroid Build Coastguard Worker #include "i386-io-access.h" 14*c2e0c6b5SAndroid Build Coastguard Worker 15*c2e0c6b5SAndroid Build Coastguard Worker static int irq_enabled; 16*c2e0c6b5SAndroid Build Coastguard Worker 17*c2e0c6b5SAndroid Build Coastguard Worker static int intel_setup_io(struct pci_access * a UNUSED)18*c2e0c6b5SAndroid Build Coastguard Workerintel_setup_io(struct pci_access *a UNUSED) 19*c2e0c6b5SAndroid Build Coastguard Worker { 20*c2e0c6b5SAndroid Build Coastguard Worker return 1; 21*c2e0c6b5SAndroid Build Coastguard Worker } 22*c2e0c6b5SAndroid Build Coastguard Worker 23*c2e0c6b5SAndroid Build Coastguard Worker static inline void intel_cleanup_io(struct pci_access * a UNUSED)24*c2e0c6b5SAndroid Build Coastguard Workerintel_cleanup_io(struct pci_access *a UNUSED) 25*c2e0c6b5SAndroid Build Coastguard Worker { 26*c2e0c6b5SAndroid Build Coastguard Worker } 27*c2e0c6b5SAndroid Build Coastguard Worker intel_io_lock(void)28*c2e0c6b5SAndroid Build Coastguard Workerstatic inline void intel_io_lock(void) 29*c2e0c6b5SAndroid Build Coastguard Worker { 30*c2e0c6b5SAndroid Build Coastguard Worker asm volatile("" : : : "memory"); 31*c2e0c6b5SAndroid Build Coastguard Worker irq_enabled = disable(); 32*c2e0c6b5SAndroid Build Coastguard Worker } 33*c2e0c6b5SAndroid Build Coastguard Worker intel_io_unlock(void)34*c2e0c6b5SAndroid Build Coastguard Workerstatic inline void intel_io_unlock(void) 35*c2e0c6b5SAndroid Build Coastguard Worker { 36*c2e0c6b5SAndroid Build Coastguard Worker asm volatile("" : : : "memory"); 37*c2e0c6b5SAndroid Build Coastguard Worker if (irq_enabled) { 38*c2e0c6b5SAndroid Build Coastguard Worker enable(); 39*c2e0c6b5SAndroid Build Coastguard Worker } 40*c2e0c6b5SAndroid Build Coastguard Worker } 41