1c39f472eSBen Skeggs /* 2c39f472eSBen Skeggs * Copyright (c) 2014, NVIDIA CORPORATION. All rights reserved. 3c39f472eSBen Skeggs * 4c39f472eSBen Skeggs * Permission is hereby granted, free of charge, to any person obtaining a 5c39f472eSBen Skeggs * copy of this software and associated documentation files (the "Software"), 6c39f472eSBen Skeggs * to deal in the Software without restriction, including without limitation 7c39f472eSBen Skeggs * the rights to use, copy, modify, merge, publish, distribute, sublicense, 8c39f472eSBen Skeggs * and/or sell copies of the Software, and to permit persons to whom the 9c39f472eSBen Skeggs * Software is furnished to do so, subject to the following conditions: 10c39f472eSBen Skeggs * 11c39f472eSBen Skeggs * The above copyright notice and this permission notice shall be included in 12c39f472eSBen Skeggs * all copies or substantial portions of the Software. 13c39f472eSBen Skeggs * 14c39f472eSBen Skeggs * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 15c39f472eSBen Skeggs * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 16c39f472eSBen Skeggs * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 17c39f472eSBen Skeggs * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 18c39f472eSBen Skeggs * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 19c39f472eSBen Skeggs * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 20c39f472eSBen Skeggs * DEALINGS IN THE SOFTWARE. 21c39f472eSBen Skeggs */ 2205c7145dSBen Skeggs #include "gk104.h" 2313de7f46SBen Skeggs #include "changk104.h" 24c39f472eSBen Skeggs 25f9360c3aSBen Skeggs #include <nvif/class.h> 26f9360c3aSBen Skeggs 279be9c606SBen Skeggs static const struct nvkm_fifo_func 2813de7f46SBen Skeggs gk20a_fifo = { 299be9c606SBen Skeggs .dtor = gk104_fifo_dtor, 309be9c606SBen Skeggs .oneinit = gk104_fifo_oneinit, 318c18138cSBen Skeggs .chid_nr = nv50_fifo_chid_nr, 32800ac1f8SBen Skeggs .chid_ctor = gk110_fifo_chid_ctor, 331c488ba9SBen Skeggs .runq_nr = gf100_fifo_runq_nr, 34*d94470e9SBen Skeggs .runl_ctor = gk104_fifo_runl_ctor, 359be9c606SBen Skeggs .info = gk104_fifo_info, 369be9c606SBen Skeggs .init = gk104_fifo_init, 379be9c606SBen Skeggs .fini = gk104_fifo_fini, 389be9c606SBen Skeggs .intr = gk104_fifo_intr, 399be9c606SBen Skeggs .intr_mmu_fault_unit = gf100_fifo_intr_mmu_fault_unit, 409be9c606SBen Skeggs .mmu_fault = &gk104_fifo_mmu_fault, 41ddc669e2SBen Skeggs .fault.access = gk104_fifo_fault_access, 4291419acfSBen Skeggs .fault.engine = gk104_fifo_fault_engine, 4391419acfSBen Skeggs .fault.reason = gk104_fifo_fault_reason, 4491419acfSBen Skeggs .fault.hubclient = gk104_fifo_fault_hubclient, 4591419acfSBen Skeggs .fault.gpcclient = gk104_fifo_fault_gpcclient, 469be9c606SBen Skeggs .engine_id = gk104_fifo_engine_id, 479be9c606SBen Skeggs .id_engine = gk104_fifo_id_engine, 489be9c606SBen Skeggs .uevent_init = gk104_fifo_uevent_init, 499be9c606SBen Skeggs .uevent_fini = gk104_fifo_uevent_fini, 509be9c606SBen Skeggs .recover_chan = gk104_fifo_recover_chan, 518c4e9f9dSBen Skeggs .runlist = &gk110_fifo_runlist, 529be9c606SBen Skeggs .pbdma = &gk208_fifo_pbdma, 53*d94470e9SBen Skeggs .runl = &gk110_runl, 541c488ba9SBen Skeggs .runq = &gk208_runq, 55*d94470e9SBen Skeggs .engn = &gk104_engn, 56*d94470e9SBen Skeggs .engn_ce = &gk104_engn_ce, 57f5e45689SBen Skeggs .cgrp = {{ }, &gk110_cgrp }, 58f5e45689SBen Skeggs .chan = {{ 0, 0, KEPLER_CHANNEL_GPFIFO_A }, &gk110_chan, .ctor = &gk104_fifo_gpfifo_new }, 5913de7f46SBen Skeggs }; 6013de7f46SBen Skeggs 6113de7f46SBen Skeggs int 62ab0db2bdSBen Skeggs gk20a_fifo_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, 63ab0db2bdSBen Skeggs struct nvkm_fifo **pfifo) 6413de7f46SBen Skeggs { 658c18138cSBen Skeggs return gk104_fifo_new_(&gk20a_fifo, device, type, inst, 0, pfifo); 6613de7f46SBen Skeggs } 67