10a34fb31SBen Skeggs /* 20a34fb31SBen Skeggs * Copyright 2015 Red Hat Inc. 30a34fb31SBen Skeggs * 40a34fb31SBen Skeggs * Permission is hereby granted, free of charge, to any person obtaining a 50a34fb31SBen Skeggs * copy of this software and associated documentation files (the "Software"), 60a34fb31SBen Skeggs * to deal in the Software without restriction, including without limitation 70a34fb31SBen Skeggs * the rights to use, copy, modify, merge, publish, distribute, sublicense, 80a34fb31SBen Skeggs * and/or sell copies of the Software, and to permit persons to whom the 90a34fb31SBen Skeggs * Software is furnished to do so, subject to the following conditions: 100a34fb31SBen Skeggs * 110a34fb31SBen Skeggs * The above copyright notice and this permission notice shall be included in 120a34fb31SBen Skeggs * all copies or substantial portions of the Software. 130a34fb31SBen Skeggs * 140a34fb31SBen Skeggs * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 150a34fb31SBen Skeggs * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 160a34fb31SBen Skeggs * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 170a34fb31SBen Skeggs * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR 180a34fb31SBen Skeggs * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, 190a34fb31SBen Skeggs * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 200a34fb31SBen Skeggs * OTHER DEALINGS IN THE SOFTWARE. 210a34fb31SBen Skeggs * 220a34fb31SBen Skeggs * Authors: Ben Skeggs <bskeggs@redhat.com> 230a34fb31SBen Skeggs */ 240a34fb31SBen Skeggs #include "priv.h" 250a34fb31SBen Skeggs 260a34fb31SBen Skeggs static u32 270a34fb31SBen Skeggs nv04_pci_rd32(struct nvkm_pci *pci, u16 addr) 280a34fb31SBen Skeggs { 290a34fb31SBen Skeggs struct nvkm_device *device = pci->subdev.device; 300a34fb31SBen Skeggs return nvkm_rd32(device, 0x001800 + addr); 310a34fb31SBen Skeggs } 320a34fb31SBen Skeggs 330a34fb31SBen Skeggs static void 340a34fb31SBen Skeggs nv04_pci_wr08(struct nvkm_pci *pci, u16 addr, u8 data) 350a34fb31SBen Skeggs { 360a34fb31SBen Skeggs struct nvkm_device *device = pci->subdev.device; 370a34fb31SBen Skeggs nvkm_wr08(device, 0x001800 + addr, data); 380a34fb31SBen Skeggs } 390a34fb31SBen Skeggs 400a34fb31SBen Skeggs static void 410a34fb31SBen Skeggs nv04_pci_wr32(struct nvkm_pci *pci, u16 addr, u32 data) 420a34fb31SBen Skeggs { 430a34fb31SBen Skeggs struct nvkm_device *device = pci->subdev.device; 440a34fb31SBen Skeggs nvkm_wr32(device, 0x001800 + addr, data); 450a34fb31SBen Skeggs } 460a34fb31SBen Skeggs 470a34fb31SBen Skeggs static const struct nvkm_pci_func 480a34fb31SBen Skeggs nv04_pci_func = { 490a34fb31SBen Skeggs .rd32 = nv04_pci_rd32, 500a34fb31SBen Skeggs .wr08 = nv04_pci_wr08, 510a34fb31SBen Skeggs .wr32 = nv04_pci_wr32, 520a34fb31SBen Skeggs }; 530a34fb31SBen Skeggs 540a34fb31SBen Skeggs int 550a34fb31SBen Skeggs nv04_pci_new(struct nvkm_device *device, int index, struct nvkm_pci **ppci) 560a34fb31SBen Skeggs { 570a34fb31SBen Skeggs return nvkm_pci_new_(&nv04_pci_func, device, index, ppci); 580a34fb31SBen Skeggs } 59