nv_local.h revision fc5a983d
1fc5a983dSmrg/* 2fc5a983dSmrg * Copyright (c) 1993-2003 NVIDIA, Corporation 3fc5a983dSmrg * 4fc5a983dSmrg * Permission is hereby granted, free of charge, to any person obtaining a 5fc5a983dSmrg * copy of this software and associated documentation files (the 6fc5a983dSmrg * "Software"), to deal in the Software without restriction, including 7fc5a983dSmrg * without limitation the rights to use, copy, modify, merge, publish, 8fc5a983dSmrg * distribute, sublicense, and/or sell copies of the Software, and to 9fc5a983dSmrg * permit persons to whom the Software is furnished to do so, subject to 10fc5a983dSmrg * the following conditions: 11fc5a983dSmrg * 12fc5a983dSmrg * The above copyright notice and this permission notice shall be included 13fc5a983dSmrg * in all copies or substantial portions of the Software. 14fc5a983dSmrg * 15fc5a983dSmrg * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 16fc5a983dSmrg * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 17fc5a983dSmrg * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 18fc5a983dSmrg * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY 19fc5a983dSmrg * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 20fc5a983dSmrg * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 21fc5a983dSmrg * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 22fc5a983dSmrg */ 23fc5a983dSmrg 24fc5a983dSmrg#ifndef __NV_LOCAL_H__ 25fc5a983dSmrg#define __NV_LOCAL_H__ 26fc5a983dSmrg 27fc5a983dSmrg/* 28fc5a983dSmrg * This file includes any environment or machine specific values to access the 29fc5a983dSmrg * HW. Put all affected includes, typdefs, etc. here so the riva_hw.* files 30fc5a983dSmrg * can stay generic in nature. 31fc5a983dSmrg */ 32fc5a983dSmrg#include "compiler.h" 33fc5a983dSmrg#include "xf86_OSproc.h" 34fc5a983dSmrg 35fc5a983dSmrg/* 36fc5a983dSmrg * Typedefs to force certain sized values. 37fc5a983dSmrg */ 38fc5a983dSmrgtypedef unsigned char U008; 39fc5a983dSmrgtypedef unsigned short U016; 40fc5a983dSmrgtypedef unsigned int U032; 41fc5a983dSmrg 42fc5a983dSmrg/* 43fc5a983dSmrg * HW access macros. These assume memory-mapped I/O, and not normal I/O space. 44fc5a983dSmrg */ 45fc5a983dSmrg#define NV_WR08(p,i,d) MMIO_OUT8((pointer)(p), (i), (d)) 46fc5a983dSmrg#define NV_RD08(p,i) MMIO_IN8((pointer)(p), (i)) 47fc5a983dSmrg#define NV_WR16(p,i,d) MMIO_OUT16((pointer)(p), (i), (d)) 48fc5a983dSmrg#define NV_RD16(p,i) MMIO_IN16((pointer)(p), (i)) 49fc5a983dSmrg#define NV_WR32(p,i,d) MMIO_OUT32((pointer)(p), (i), (d)) 50fc5a983dSmrg#define NV_RD32(p,i) MMIO_IN32((pointer)(p), (i)) 51fc5a983dSmrg 52fc5a983dSmrg/* VGA I/O is now always done through MMIO */ 53fc5a983dSmrg#define VGA_WR08(p,i,d) NV_WR08(p,i,d) 54fc5a983dSmrg#define VGA_RD08(p,i) NV_RD08(p,i) 55fc5a983dSmrg 56fc5a983dSmrg#define NVDmaNext(pNv, data) \ 57fc5a983dSmrg (pNv)->dmaBase[(pNv)->dmaCurrent++] = (data) 58fc5a983dSmrg 59fc5a983dSmrg#define NVDmaStart(pNv, tag, size) { \ 60fc5a983dSmrg if((pNv)->dmaFree <= (size)) \ 61fc5a983dSmrg NVDmaWait(pNv, size); \ 62fc5a983dSmrg NVDmaNext(pNv, ((size) << 18) | (tag)); \ 63fc5a983dSmrg (pNv)->dmaFree -= ((size) + 1); \ 64fc5a983dSmrg} 65fc5a983dSmrg 66fc5a983dSmrg#if defined(__i386__) 67fc5a983dSmrg#define _NV_FENCE() outb(0x3D0, 0); 68fc5a983dSmrg#else 69fc5a983dSmrg#define _NV_FENCE() mem_barrier(); 70fc5a983dSmrg#endif 71fc5a983dSmrg 72fc5a983dSmrg#define WRITE_PUT(pNv, data) { \ 73fc5a983dSmrg volatile CARD8 scratch; \ 74fc5a983dSmrg _NV_FENCE() \ 75fc5a983dSmrg scratch = (pNv)->FbStart[0]; \ 76fc5a983dSmrg (pNv)->FIFO[0x0010] = (data) << 2; \ 77fc5a983dSmrg mem_barrier(); \ 78fc5a983dSmrg} 79fc5a983dSmrg 80fc5a983dSmrg#define READ_GET(pNv) ((pNv)->FIFO[0x0011] >> 2) 81fc5a983dSmrg 82fc5a983dSmrg 83fc5a983dSmrg#endif /* __NV_LOCAL_H__ */ 84