19274f4a9ba7e70d1770e237fca16d52f27f0c728Ben Skeggs/*
29274f4a9ba7e70d1770e237fca16d52f27f0c728Ben Skeggs * Copyright 2012 Red Hat Inc.
39274f4a9ba7e70d1770e237fca16d52f27f0c728Ben Skeggs *
49274f4a9ba7e70d1770e237fca16d52f27f0c728Ben Skeggs * Permission is hereby granted, free of charge, to any person obtaining a
59274f4a9ba7e70d1770e237fca16d52f27f0c728Ben Skeggs * copy of this software and associated documentation files (the "Software"),
69274f4a9ba7e70d1770e237fca16d52f27f0c728Ben Skeggs * to deal in the Software without restriction, including without limitation
79274f4a9ba7e70d1770e237fca16d52f27f0c728Ben Skeggs * the rights to use, copy, modify, merge, publish, distribute, sublicense,
89274f4a9ba7e70d1770e237fca16d52f27f0c728Ben Skeggs * and/or sell copies of the Software, and to permit persons to whom the
99274f4a9ba7e70d1770e237fca16d52f27f0c728Ben Skeggs * Software is furnished to do so, subject to the following conditions:
109274f4a9ba7e70d1770e237fca16d52f27f0c728Ben Skeggs *
119274f4a9ba7e70d1770e237fca16d52f27f0c728Ben Skeggs * The above copyright notice and this permission notice shall be included in
129274f4a9ba7e70d1770e237fca16d52f27f0c728Ben Skeggs * all copies or substantial portions of the Software.
139274f4a9ba7e70d1770e237fca16d52f27f0c728Ben Skeggs *
149274f4a9ba7e70d1770e237fca16d52f27f0c728Ben Skeggs * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
159274f4a9ba7e70d1770e237fca16d52f27f0c728Ben Skeggs * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
169274f4a9ba7e70d1770e237fca16d52f27f0c728Ben Skeggs * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
179274f4a9ba7e70d1770e237fca16d52f27f0c728Ben Skeggs * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
189274f4a9ba7e70d1770e237fca16d52f27f0c728Ben Skeggs * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
199274f4a9ba7e70d1770e237fca16d52f27f0c728Ben Skeggs * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
209274f4a9ba7e70d1770e237fca16d52f27f0c728Ben Skeggs * OTHER DEALINGS IN THE SOFTWARE.
219274f4a9ba7e70d1770e237fca16d52f27f0c728Ben Skeggs *
229274f4a9ba7e70d1770e237fca16d52f27f0c728Ben Skeggs * Authors: Ben Skeggs
239274f4a9ba7e70d1770e237fca16d52f27f0c728Ben Skeggs */
249274f4a9ba7e70d1770e237fca16d52f27f0c728Ben Skeggs
2570c0f263cc2eb12e02506eb75f0a71490e7dea4dBen Skeggs#include <subdev/bios.h>
26a10220bbf883931fcf18eb0e850b87d82cfaa412Martin Peres#include <subdev/bus.h>
27e0996aea4c349ba302b63203b7d5cab6034dbdcaBen Skeggs#include <subdev/gpio.h>
284196faa8623264b79279a06fd186654c959f2767Ben Skeggs#include <subdev/i2c.h>
293ca6cd435effd1d762217529baaab010f34f8cc8Martin Peres#include <subdev/fuse.h>
308aceb7de47ea2491abc1a577dc875b19e9947a54Ben Skeggs#include <subdev/clock.h>
31aa1b9b4836a8ab093ec06b0780553566a5430da7Martin Peres#include <subdev/therm.h>
32d38ac5217ab43cf61e8ebe6d7114fb2d1ca9a3a4Ben Skeggs#include <subdev/mxm.h>
33cb75d97e9c77743ecfcc43375be135a55a4d9b25Ben Skeggs#include <subdev/devinit.h>
347d9115dee978e8540734c456c925d71a37752b8dBen Skeggs#include <subdev/mc.h>
355a5c7432bbbd2e318dff107b4ff960ab543a7cefBen Skeggs#include <subdev/timer.h>
36861d21074bbb141b0cc165a61c11f571571cda12Ben Skeggs#include <subdev/fb.h>
373863c9bc887e9638a9d905d55f6038641ece78d6Ben Skeggs#include <subdev/instmem.h>
383863c9bc887e9638a9d905d55f6038641ece78d6Ben Skeggs#include <subdev/vm.h>
393863c9bc887e9638a9d905d55f6038641ece78d6Ben Skeggs#include <subdev/bar.h>
40ff4b42c7532e6ed6a5ae3c9cb71395b41a0a4022Ben Skeggs#include <subdev/pwr.h>
41c9c0ccae48e27b767e98a4c120976e43195dd3a7Ben Skeggs#include <subdev/volt.h>
429274f4a9ba7e70d1770e237fca16d52f27f0c728Ben Skeggs
43dded35dee323e286ef444f148abaf88adb58d4f3Ben Skeggs#include <engine/device.h>
44ebb945a94bba2ce8dff7b0942ff2b3f2a52a0a69Ben Skeggs#include <engine/dmaobj.h>
45ebb945a94bba2ce8dff7b0942ff2b3f2a52a0a69Ben Skeggs#include <engine/fifo.h>
46ebb945a94bba2ce8dff7b0942ff2b3f2a52a0a69Ben Skeggs#include <engine/software.h>
47ebb945a94bba2ce8dff7b0942ff2b3f2a52a0a69Ben Skeggs#include <engine/graph.h>
48ebb945a94bba2ce8dff7b0942ff2b3f2a52a0a69Ben Skeggs#include <engine/mpeg.h>
49ebb945a94bba2ce8dff7b0942ff2b3f2a52a0a69Ben Skeggs#include <engine/vp.h>
50ebb945a94bba2ce8dff7b0942ff2b3f2a52a0a69Ben Skeggs#include <engine/crypt.h>
51ebb945a94bba2ce8dff7b0942ff2b3f2a52a0a69Ben Skeggs#include <engine/bsp.h>
52ebb945a94bba2ce8dff7b0942ff2b3f2a52a0a69Ben Skeggs#include <engine/ppp.h>
53ebb945a94bba2ce8dff7b0942ff2b3f2a52a0a69Ben Skeggs#include <engine/copy.h>
54ebb945a94bba2ce8dff7b0942ff2b3f2a52a0a69Ben Skeggs#include <engine/disp.h>
55aa4d7a4d55ab375b2f1c894ba680186e4a7c6fd6Ben Skeggs#include <engine/perfmon.h>
56ebb945a94bba2ce8dff7b0942ff2b3f2a52a0a69Ben Skeggs
579274f4a9ba7e70d1770e237fca16d52f27f0c728Ben Skeggsint
589274f4a9ba7e70d1770e237fca16d52f27f0c728Ben Skeggsnv50_identify(struct nouveau_device *device)
599274f4a9ba7e70d1770e237fca16d52f27f0c728Ben Skeggs{
609274f4a9ba7e70d1770e237fca16d52f27f0c728Ben Skeggs	switch (device->chipset) {
619274f4a9ba7e70d1770e237fca16d52f27f0c728Ben Skeggs	case 0x50:
622094dd82eddc468b53ee99d92c38b23a65efac03Ben Skeggs		device->cname = "G80";
6370c0f263cc2eb12e02506eb75f0a71490e7dea4dBen Skeggs		device->oclass[NVDEV_SUBDEV_VBIOS  ] = &nouveau_bios_oclass;
64d93174ec390ebc7c245ec8d09ec6409904334904Ben Skeggs		device->oclass[NVDEV_SUBDEV_GPIO   ] =  nv50_gpio_oclass;
65c26fe843560fe01b4b652ee21952d33f60f4e699Ben Skeggs		device->oclass[NVDEV_SUBDEV_I2C    ] =  nv50_i2c_oclass;
663ca6cd435effd1d762217529baaab010f34f8cc8Martin Peres		device->oclass[NVDEV_SUBDEV_FUSE   ] =  &g80_fuse_oclass;
677c856522069755ab9d163a24ac332cd3cb35fe30Ben Skeggs		device->oclass[NVDEV_SUBDEV_CLOCK  ] =  nv50_clock_oclass;
68aa1b9b4836a8ab093ec06b0780553566a5430da7Martin Peres		device->oclass[NVDEV_SUBDEV_THERM  ] = &nv50_therm_oclass;
69d38ac5217ab43cf61e8ebe6d7114fb2d1ca9a3a4Ben Skeggs		device->oclass[NVDEV_SUBDEV_MXM    ] = &nv50_mxm_oclass;
70cf336014c6dc3ef1431d84b5a94e47a22660493bBen Skeggs		device->oclass[NVDEV_SUBDEV_DEVINIT] =  nv50_devinit_oclass;
7108f6fbdb9bef0f9f920a8531addb0952c293d4c9Ben Skeggs		device->oclass[NVDEV_SUBDEV_MC     ] =  nv50_mc_oclass;
7248ae0b355f21533145133002854de89a0537408dBen Skeggs		device->oclass[NVDEV_SUBDEV_BUS    ] =  nv50_bus_oclass;
735a5c7432bbbd2e318dff107b4ff960ab543a7cefBen Skeggs		device->oclass[NVDEV_SUBDEV_TIMER  ] = &nv04_timer_oclass;
741e9fc30e38bbedf5cbba9238393084c35e1df551Ben Skeggs		device->oclass[NVDEV_SUBDEV_FB     ] =  nv50_fb_oclass;
7524a4ae86de89b5cbbf8530c371007383de9f2d58Ben Skeggs		device->oclass[NVDEV_SUBDEV_INSTMEM] =  nv50_instmem_oclass;
763863c9bc887e9638a9d905d55f6038641ece78d6Ben Skeggs		device->oclass[NVDEV_SUBDEV_VM     ] = &nv50_vmmgr_oclass;
773863c9bc887e9638a9d905d55f6038641ece78d6Ben Skeggs		device->oclass[NVDEV_SUBDEV_BAR    ] = &nv50_bar_oclass;
78c9c0ccae48e27b767e98a4c120976e43195dd3a7Ben Skeggs		device->oclass[NVDEV_SUBDEV_VOLT   ] = &nv40_volt_oclass;
79bc98540b7b506689a9bd7bedffb9f60f9c62d945Ben Skeggs		device->oclass[NVDEV_ENGINE_DMAOBJ ] =  nv50_dmaeng_oclass;
8016c4f227ffc556a4851518092e2b5979da1280c1Ben Skeggs		device->oclass[NVDEV_ENGINE_FIFO   ] =  nv50_fifo_oclass;
81c46c3ddf1f5bbc4fbd2cd661a9e8f0ba3daf5298Ben Skeggs		device->oclass[NVDEV_ENGINE_SW     ] =  nv50_software_oclass;
82ebb945a94bba2ce8dff7b0942ff2b3f2a52a0a69Ben Skeggs		device->oclass[NVDEV_ENGINE_GR     ] = &nv50_graph_oclass;
83ebb945a94bba2ce8dff7b0942ff2b3f2a52a0a69Ben Skeggs		device->oclass[NVDEV_ENGINE_MPEG   ] = &nv50_mpeg_oclass;
84a8f8b4891d26c430a18aad6cce561e8d50e85b10Ben Skeggs		device->oclass[NVDEV_ENGINE_DISP   ] =  nv50_disp_oclass;
85aa4d7a4d55ab375b2f1c894ba680186e4a7c6fd6Ben Skeggs		device->oclass[NVDEV_ENGINE_PERFMON] =  nv50_perfmon_oclass;
869274f4a9ba7e70d1770e237fca16d52f27f0c728Ben Skeggs		break;
879274f4a9ba7e70d1770e237fca16d52f27f0c728Ben Skeggs	case 0x84:
882094dd82eddc468b53ee99d92c38b23a65efac03Ben Skeggs		device->cname = "G84";
8970c0f263cc2eb12e02506eb75f0a71490e7dea4dBen Skeggs		device->oclass[NVDEV_SUBDEV_VBIOS  ] = &nouveau_bios_oclass;
90d93174ec390ebc7c245ec8d09ec6409904334904Ben Skeggs		device->oclass[NVDEV_SUBDEV_GPIO   ] =  nv50_gpio_oclass;
91c26fe843560fe01b4b652ee21952d33f60f4e699Ben Skeggs		device->oclass[NVDEV_SUBDEV_I2C    ] =  nv50_i2c_oclass;
923ca6cd435effd1d762217529baaab010f34f8cc8Martin Peres		device->oclass[NVDEV_SUBDEV_FUSE   ] =  &g80_fuse_oclass;
937c856522069755ab9d163a24ac332cd3cb35fe30Ben Skeggs		device->oclass[NVDEV_SUBDEV_CLOCK  ] =  nv84_clock_oclass;
942f4573679a8159e0c80a5d4f812b778aef9ceb14Martin Peres		device->oclass[NVDEV_SUBDEV_THERM  ] = &nv84_therm_oclass;
95d38ac5217ab43cf61e8ebe6d7114fb2d1ca9a3a4Ben Skeggs		device->oclass[NVDEV_SUBDEV_MXM    ] = &nv50_mxm_oclass;
964019aaa2b314a5be9886ae1db64ff8c6d3c060edIlia Mirkin		device->oclass[NVDEV_SUBDEV_DEVINIT] =  nv84_devinit_oclass;
9708f6fbdb9bef0f9f920a8531addb0952c293d4c9Ben Skeggs		device->oclass[NVDEV_SUBDEV_MC     ] =  nv50_mc_oclass;
9848ae0b355f21533145133002854de89a0537408dBen Skeggs		device->oclass[NVDEV_SUBDEV_BUS    ] =  nv50_bus_oclass;
995a5c7432bbbd2e318dff107b4ff960ab543a7cefBen Skeggs		device->oclass[NVDEV_SUBDEV_TIMER  ] = &nv04_timer_oclass;
1009ca3037e60924c8fcb53977d72efa493c821eec5Ben Skeggs		device->oclass[NVDEV_SUBDEV_FB     ] =  nv84_fb_oclass;
10124a4ae86de89b5cbbf8530c371007383de9f2d58Ben Skeggs		device->oclass[NVDEV_SUBDEV_INSTMEM] =  nv50_instmem_oclass;
1023863c9bc887e9638a9d905d55f6038641ece78d6Ben Skeggs		device->oclass[NVDEV_SUBDEV_VM     ] = &nv50_vmmgr_oclass;
1033863c9bc887e9638a9d905d55f6038641ece78d6Ben Skeggs		device->oclass[NVDEV_SUBDEV_BAR    ] = &nv50_bar_oclass;
104c9c0ccae48e27b767e98a4c120976e43195dd3a7Ben Skeggs		device->oclass[NVDEV_SUBDEV_VOLT   ] = &nv40_volt_oclass;
105bc98540b7b506689a9bd7bedffb9f60f9c62d945Ben Skeggs		device->oclass[NVDEV_ENGINE_DMAOBJ ] =  nv50_dmaeng_oclass;
10616c4f227ffc556a4851518092e2b5979da1280c1Ben Skeggs		device->oclass[NVDEV_ENGINE_FIFO   ] =  nv84_fifo_oclass;
107c46c3ddf1f5bbc4fbd2cd661a9e8f0ba3daf5298Ben Skeggs		device->oclass[NVDEV_ENGINE_SW     ] =  nv50_software_oclass;
108ebb945a94bba2ce8dff7b0942ff2b3f2a52a0a69Ben Skeggs		device->oclass[NVDEV_ENGINE_GR     ] = &nv50_graph_oclass;
109ebb945a94bba2ce8dff7b0942ff2b3f2a52a0a69Ben Skeggs		device->oclass[NVDEV_ENGINE_MPEG   ] = &nv84_mpeg_oclass;
110ebb945a94bba2ce8dff7b0942ff2b3f2a52a0a69Ben Skeggs		device->oclass[NVDEV_ENGINE_VP     ] = &nv84_vp_oclass;
111ebb945a94bba2ce8dff7b0942ff2b3f2a52a0a69Ben Skeggs		device->oclass[NVDEV_ENGINE_CRYPT  ] = &nv84_crypt_oclass;
112ebb945a94bba2ce8dff7b0942ff2b3f2a52a0a69Ben Skeggs		device->oclass[NVDEV_ENGINE_BSP    ] = &nv84_bsp_oclass;
113a8f8b4891d26c430a18aad6cce561e8d50e85b10Ben Skeggs		device->oclass[NVDEV_ENGINE_DISP   ] =  nv84_disp_oclass;
114aa4d7a4d55ab375b2f1c894ba680186e4a7c6fd6Ben Skeggs		device->oclass[NVDEV_ENGINE_PERFMON] =  nv84_perfmon_oclass;
1159274f4a9ba7e70d1770e237fca16d52f27f0c728Ben Skeggs		break;
1169274f4a9ba7e70d1770e237fca16d52f27f0c728Ben Skeggs	case 0x86:
1172094dd82eddc468b53ee99d92c38b23a65efac03Ben Skeggs		device->cname = "G86";
11870c0f263cc2eb12e02506eb75f0a71490e7dea4dBen Skeggs		device->oclass[NVDEV_SUBDEV_VBIOS  ] = &nouveau_bios_oclass;
119d93174ec390ebc7c245ec8d09ec6409904334904Ben Skeggs		device->oclass[NVDEV_SUBDEV_GPIO   ] =  nv50_gpio_oclass;
120c26fe843560fe01b4b652ee21952d33f60f4e699Ben Skeggs		device->oclass[NVDEV_SUBDEV_I2C    ] =  nv50_i2c_oclass;
1213ca6cd435effd1d762217529baaab010f34f8cc8Martin Peres		device->oclass[NVDEV_SUBDEV_FUSE   ] =  &g80_fuse_oclass;
1227c856522069755ab9d163a24ac332cd3cb35fe30Ben Skeggs		device->oclass[NVDEV_SUBDEV_CLOCK  ] =  nv84_clock_oclass;
1232f4573679a8159e0c80a5d4f812b778aef9ceb14Martin Peres		device->oclass[NVDEV_SUBDEV_THERM  ] = &nv84_therm_oclass;
124d38ac5217ab43cf61e8ebe6d7114fb2d1ca9a3a4Ben Skeggs		device->oclass[NVDEV_SUBDEV_MXM    ] = &nv50_mxm_oclass;
1254019aaa2b314a5be9886ae1db64ff8c6d3c060edIlia Mirkin		device->oclass[NVDEV_SUBDEV_DEVINIT] =  nv84_devinit_oclass;
12608f6fbdb9bef0f9f920a8531addb0952c293d4c9Ben Skeggs		device->oclass[NVDEV_SUBDEV_MC     ] =  nv50_mc_oclass;
12748ae0b355f21533145133002854de89a0537408dBen Skeggs		device->oclass[NVDEV_SUBDEV_BUS    ] =  nv50_bus_oclass;
1285a5c7432bbbd2e318dff107b4ff960ab543a7cefBen Skeggs		device->oclass[NVDEV_SUBDEV_TIMER  ] = &nv04_timer_oclass;
1299ca3037e60924c8fcb53977d72efa493c821eec5Ben Skeggs		device->oclass[NVDEV_SUBDEV_FB     ] =  nv84_fb_oclass;
13024a4ae86de89b5cbbf8530c371007383de9f2d58Ben Skeggs		device->oclass[NVDEV_SUBDEV_INSTMEM] =  nv50_instmem_oclass;
1313863c9bc887e9638a9d905d55f6038641ece78d6Ben Skeggs		device->oclass[NVDEV_SUBDEV_VM     ] = &nv50_vmmgr_oclass;
1323863c9bc887e9638a9d905d55f6038641ece78d6Ben Skeggs		device->oclass[NVDEV_SUBDEV_BAR    ] = &nv50_bar_oclass;
133c9c0ccae48e27b767e98a4c120976e43195dd3a7Ben Skeggs		device->oclass[NVDEV_SUBDEV_VOLT   ] = &nv40_volt_oclass;
134bc98540b7b506689a9bd7bedffb9f60f9c62d945Ben Skeggs		device->oclass[NVDEV_ENGINE_DMAOBJ ] =  nv50_dmaeng_oclass;
13516c4f227ffc556a4851518092e2b5979da1280c1Ben Skeggs		device->oclass[NVDEV_ENGINE_FIFO   ] =  nv84_fifo_oclass;
136c46c3ddf1f5bbc4fbd2cd661a9e8f0ba3daf5298Ben Skeggs		device->oclass[NVDEV_ENGINE_SW     ] =  nv50_software_oclass;
137ebb945a94bba2ce8dff7b0942ff2b3f2a52a0a69Ben Skeggs		device->oclass[NVDEV_ENGINE_GR     ] = &nv50_graph_oclass;
138ebb945a94bba2ce8dff7b0942ff2b3f2a52a0a69Ben Skeggs		device->oclass[NVDEV_ENGINE_MPEG   ] = &nv84_mpeg_oclass;
139ebb945a94bba2ce8dff7b0942ff2b3f2a52a0a69Ben Skeggs		device->oclass[NVDEV_ENGINE_VP     ] = &nv84_vp_oclass;
140ebb945a94bba2ce8dff7b0942ff2b3f2a52a0a69Ben Skeggs		device->oclass[NVDEV_ENGINE_CRYPT  ] = &nv84_crypt_oclass;
141ebb945a94bba2ce8dff7b0942ff2b3f2a52a0a69Ben Skeggs		device->oclass[NVDEV_ENGINE_BSP    ] = &nv84_bsp_oclass;
142a8f8b4891d26c430a18aad6cce561e8d50e85b10Ben Skeggs		device->oclass[NVDEV_ENGINE_DISP   ] =  nv84_disp_oclass;
143aa4d7a4d55ab375b2f1c894ba680186e4a7c6fd6Ben Skeggs		device->oclass[NVDEV_ENGINE_PERFMON] =  nv84_perfmon_oclass;
1449274f4a9ba7e70d1770e237fca16d52f27f0c728Ben Skeggs		break;
1459274f4a9ba7e70d1770e237fca16d52f27f0c728Ben Skeggs	case 0x92:
1462094dd82eddc468b53ee99d92c38b23a65efac03Ben Skeggs		device->cname = "G92";
14770c0f263cc2eb12e02506eb75f0a71490e7dea4dBen Skeggs		device->oclass[NVDEV_SUBDEV_VBIOS  ] = &nouveau_bios_oclass;
148b485a7005faba38286bc02ab1d80e2cbf61c1002Emil Velikov		device->oclass[NVDEV_SUBDEV_GPIO   ] =  nv50_gpio_oclass;
149c26fe843560fe01b4b652ee21952d33f60f4e699Ben Skeggs		device->oclass[NVDEV_SUBDEV_I2C    ] =  nv50_i2c_oclass;
1503ca6cd435effd1d762217529baaab010f34f8cc8Martin Peres		device->oclass[NVDEV_SUBDEV_FUSE   ] =  &g80_fuse_oclass;
1517c856522069755ab9d163a24ac332cd3cb35fe30Ben Skeggs		device->oclass[NVDEV_SUBDEV_CLOCK  ] =  nv84_clock_oclass;
1522f4573679a8159e0c80a5d4f812b778aef9ceb14Martin Peres		device->oclass[NVDEV_SUBDEV_THERM  ] = &nv84_therm_oclass;
153d38ac5217ab43cf61e8ebe6d7114fb2d1ca9a3a4Ben Skeggs		device->oclass[NVDEV_SUBDEV_MXM    ] = &nv50_mxm_oclass;
1544019aaa2b314a5be9886ae1db64ff8c6d3c060edIlia Mirkin		device->oclass[NVDEV_SUBDEV_DEVINIT] =  nv84_devinit_oclass;
15508f6fbdb9bef0f9f920a8531addb0952c293d4c9Ben Skeggs		device->oclass[NVDEV_SUBDEV_MC     ] =  nv50_mc_oclass;
15648ae0b355f21533145133002854de89a0537408dBen Skeggs		device->oclass[NVDEV_SUBDEV_BUS    ] =  nv50_bus_oclass;
1575a5c7432bbbd2e318dff107b4ff960ab543a7cefBen Skeggs		device->oclass[NVDEV_SUBDEV_TIMER  ] = &nv04_timer_oclass;
1589ca3037e60924c8fcb53977d72efa493c821eec5Ben Skeggs		device->oclass[NVDEV_SUBDEV_FB     ] =  nv84_fb_oclass;
15924a4ae86de89b5cbbf8530c371007383de9f2d58Ben Skeggs		device->oclass[NVDEV_SUBDEV_INSTMEM] =  nv50_instmem_oclass;
1603863c9bc887e9638a9d905d55f6038641ece78d6Ben Skeggs		device->oclass[NVDEV_SUBDEV_VM     ] = &nv50_vmmgr_oclass;
1613863c9bc887e9638a9d905d55f6038641ece78d6Ben Skeggs		device->oclass[NVDEV_SUBDEV_BAR    ] = &nv50_bar_oclass;
162c9c0ccae48e27b767e98a4c120976e43195dd3a7Ben Skeggs		device->oclass[NVDEV_SUBDEV_VOLT   ] = &nv40_volt_oclass;
163bc98540b7b506689a9bd7bedffb9f60f9c62d945Ben Skeggs		device->oclass[NVDEV_ENGINE_DMAOBJ ] =  nv50_dmaeng_oclass;
16416c4f227ffc556a4851518092e2b5979da1280c1Ben Skeggs		device->oclass[NVDEV_ENGINE_FIFO   ] =  nv84_fifo_oclass;
165c46c3ddf1f5bbc4fbd2cd661a9e8f0ba3daf5298Ben Skeggs		device->oclass[NVDEV_ENGINE_SW     ] =  nv50_software_oclass;
166ebb945a94bba2ce8dff7b0942ff2b3f2a52a0a69Ben Skeggs		device->oclass[NVDEV_ENGINE_GR     ] = &nv50_graph_oclass;
167ebb945a94bba2ce8dff7b0942ff2b3f2a52a0a69Ben Skeggs		device->oclass[NVDEV_ENGINE_MPEG   ] = &nv84_mpeg_oclass;
168ebb945a94bba2ce8dff7b0942ff2b3f2a52a0a69Ben Skeggs		device->oclass[NVDEV_ENGINE_VP     ] = &nv84_vp_oclass;
169ebb945a94bba2ce8dff7b0942ff2b3f2a52a0a69Ben Skeggs		device->oclass[NVDEV_ENGINE_CRYPT  ] = &nv84_crypt_oclass;
170ebb945a94bba2ce8dff7b0942ff2b3f2a52a0a69Ben Skeggs		device->oclass[NVDEV_ENGINE_BSP    ] = &nv84_bsp_oclass;
171a8f8b4891d26c430a18aad6cce561e8d50e85b10Ben Skeggs		device->oclass[NVDEV_ENGINE_DISP   ] =  nv84_disp_oclass;
172aa4d7a4d55ab375b2f1c894ba680186e4a7c6fd6Ben Skeggs		device->oclass[NVDEV_ENGINE_PERFMON] =  nv84_perfmon_oclass;
1739274f4a9ba7e70d1770e237fca16d52f27f0c728Ben Skeggs		break;
1749274f4a9ba7e70d1770e237fca16d52f27f0c728Ben Skeggs	case 0x94:
1752094dd82eddc468b53ee99d92c38b23a65efac03Ben Skeggs		device->cname = "G94";
17670c0f263cc2eb12e02506eb75f0a71490e7dea4dBen Skeggs		device->oclass[NVDEV_SUBDEV_VBIOS  ] = &nouveau_bios_oclass;
177b485a7005faba38286bc02ab1d80e2cbf61c1002Emil Velikov		device->oclass[NVDEV_SUBDEV_GPIO   ] =  nv94_gpio_oclass;
178c26fe843560fe01b4b652ee21952d33f60f4e699Ben Skeggs		device->oclass[NVDEV_SUBDEV_I2C    ] =  nv94_i2c_oclass;
1793ca6cd435effd1d762217529baaab010f34f8cc8Martin Peres		device->oclass[NVDEV_SUBDEV_FUSE   ] =  &g80_fuse_oclass;
1807c856522069755ab9d163a24ac332cd3cb35fe30Ben Skeggs		device->oclass[NVDEV_SUBDEV_CLOCK  ] =  nv84_clock_oclass;
1812f4573679a8159e0c80a5d4f812b778aef9ceb14Martin Peres		device->oclass[NVDEV_SUBDEV_THERM  ] = &nv84_therm_oclass;
182d38ac5217ab43cf61e8ebe6d7114fb2d1ca9a3a4Ben Skeggs		device->oclass[NVDEV_SUBDEV_MXM    ] = &nv50_mxm_oclass;
1834019aaa2b314a5be9886ae1db64ff8c6d3c060edIlia Mirkin		device->oclass[NVDEV_SUBDEV_DEVINIT] =  nv84_devinit_oclass;
1849a9d5c64ef8b744a50446a0467aaf49a3292ddffBen Skeggs		device->oclass[NVDEV_SUBDEV_MC     ] =  nv94_mc_oclass;
1852984506fb6172712f83e573319baf7dbd0eb9028Ben Skeggs		device->oclass[NVDEV_SUBDEV_BUS    ] =  nv94_bus_oclass;
1865a5c7432bbbd2e318dff107b4ff960ab543a7cefBen Skeggs		device->oclass[NVDEV_SUBDEV_TIMER  ] = &nv04_timer_oclass;
1879ca3037e60924c8fcb53977d72efa493c821eec5Ben Skeggs		device->oclass[NVDEV_SUBDEV_FB     ] =  nv84_fb_oclass;
18824a4ae86de89b5cbbf8530c371007383de9f2d58Ben Skeggs		device->oclass[NVDEV_SUBDEV_INSTMEM] =  nv50_instmem_oclass;
1893863c9bc887e9638a9d905d55f6038641ece78d6Ben Skeggs		device->oclass[NVDEV_SUBDEV_VM     ] = &nv50_vmmgr_oclass;
1903863c9bc887e9638a9d905d55f6038641ece78d6Ben Skeggs		device->oclass[NVDEV_SUBDEV_BAR    ] = &nv50_bar_oclass;
191c9c0ccae48e27b767e98a4c120976e43195dd3a7Ben Skeggs		device->oclass[NVDEV_SUBDEV_VOLT   ] = &nv40_volt_oclass;
192bc98540b7b506689a9bd7bedffb9f60f9c62d945Ben Skeggs		device->oclass[NVDEV_ENGINE_DMAOBJ ] =  nv50_dmaeng_oclass;
19316c4f227ffc556a4851518092e2b5979da1280c1Ben Skeggs		device->oclass[NVDEV_ENGINE_FIFO   ] =  nv84_fifo_oclass;
194c46c3ddf1f5bbc4fbd2cd661a9e8f0ba3daf5298Ben Skeggs		device->oclass[NVDEV_ENGINE_SW     ] =  nv50_software_oclass;
195ebb945a94bba2ce8dff7b0942ff2b3f2a52a0a69Ben Skeggs		device->oclass[NVDEV_ENGINE_GR     ] = &nv50_graph_oclass;
196ebb945a94bba2ce8dff7b0942ff2b3f2a52a0a69Ben Skeggs		device->oclass[NVDEV_ENGINE_MPEG   ] = &nv84_mpeg_oclass;
197ebb945a94bba2ce8dff7b0942ff2b3f2a52a0a69Ben Skeggs		device->oclass[NVDEV_ENGINE_VP     ] = &nv84_vp_oclass;
198ebb945a94bba2ce8dff7b0942ff2b3f2a52a0a69Ben Skeggs		device->oclass[NVDEV_ENGINE_CRYPT  ] = &nv84_crypt_oclass;
199ebb945a94bba2ce8dff7b0942ff2b3f2a52a0a69Ben Skeggs		device->oclass[NVDEV_ENGINE_BSP    ] = &nv84_bsp_oclass;
200a8f8b4891d26c430a18aad6cce561e8d50e85b10Ben Skeggs		device->oclass[NVDEV_ENGINE_DISP   ] =  nv94_disp_oclass;
201aa4d7a4d55ab375b2f1c894ba680186e4a7c6fd6Ben Skeggs		device->oclass[NVDEV_ENGINE_PERFMON] =  nv84_perfmon_oclass;
2029274f4a9ba7e70d1770e237fca16d52f27f0c728Ben Skeggs		break;
2039274f4a9ba7e70d1770e237fca16d52f27f0c728Ben Skeggs	case 0x96:
2042094dd82eddc468b53ee99d92c38b23a65efac03Ben Skeggs		device->cname = "G96";
20570c0f263cc2eb12e02506eb75f0a71490e7dea4dBen Skeggs		device->oclass[NVDEV_SUBDEV_VBIOS  ] = &nouveau_bios_oclass;
206b485a7005faba38286bc02ab1d80e2cbf61c1002Emil Velikov		device->oclass[NVDEV_SUBDEV_GPIO   ] =  nv94_gpio_oclass;
207c26fe843560fe01b4b652ee21952d33f60f4e699Ben Skeggs		device->oclass[NVDEV_SUBDEV_I2C    ] =  nv94_i2c_oclass;
2083ca6cd435effd1d762217529baaab010f34f8cc8Martin Peres		device->oclass[NVDEV_SUBDEV_FUSE   ] =  &g80_fuse_oclass;
2097c856522069755ab9d163a24ac332cd3cb35fe30Ben Skeggs		device->oclass[NVDEV_SUBDEV_CLOCK  ] =  nv84_clock_oclass;
2102f4573679a8159e0c80a5d4f812b778aef9ceb14Martin Peres		device->oclass[NVDEV_SUBDEV_THERM  ] = &nv84_therm_oclass;
211d38ac5217ab43cf61e8ebe6d7114fb2d1ca9a3a4Ben Skeggs		device->oclass[NVDEV_SUBDEV_MXM    ] = &nv50_mxm_oclass;
2124019aaa2b314a5be9886ae1db64ff8c6d3c060edIlia Mirkin		device->oclass[NVDEV_SUBDEV_DEVINIT] =  nv84_devinit_oclass;
2139a9d5c64ef8b744a50446a0467aaf49a3292ddffBen Skeggs		device->oclass[NVDEV_SUBDEV_MC     ] =  nv94_mc_oclass;
2142984506fb6172712f83e573319baf7dbd0eb9028Ben Skeggs		device->oclass[NVDEV_SUBDEV_BUS    ] =  nv94_bus_oclass;
2155a5c7432bbbd2e318dff107b4ff960ab543a7cefBen Skeggs		device->oclass[NVDEV_SUBDEV_TIMER  ] = &nv04_timer_oclass;
2169ca3037e60924c8fcb53977d72efa493c821eec5Ben Skeggs		device->oclass[NVDEV_SUBDEV_FB     ] =  nv84_fb_oclass;
21724a4ae86de89b5cbbf8530c371007383de9f2d58Ben Skeggs		device->oclass[NVDEV_SUBDEV_INSTMEM] =  nv50_instmem_oclass;
2183863c9bc887e9638a9d905d55f6038641ece78d6Ben Skeggs		device->oclass[NVDEV_SUBDEV_VM     ] = &nv50_vmmgr_oclass;
2193863c9bc887e9638a9d905d55f6038641ece78d6Ben Skeggs		device->oclass[NVDEV_SUBDEV_BAR    ] = &nv50_bar_oclass;
220c9c0ccae48e27b767e98a4c120976e43195dd3a7Ben Skeggs		device->oclass[NVDEV_SUBDEV_VOLT   ] = &nv40_volt_oclass;
221bc98540b7b506689a9bd7bedffb9f60f9c62d945Ben Skeggs		device->oclass[NVDEV_ENGINE_DMAOBJ ] =  nv50_dmaeng_oclass;
22216c4f227ffc556a4851518092e2b5979da1280c1Ben Skeggs		device->oclass[NVDEV_ENGINE_FIFO   ] =  nv84_fifo_oclass;
223c46c3ddf1f5bbc4fbd2cd661a9e8f0ba3daf5298Ben Skeggs		device->oclass[NVDEV_ENGINE_SW     ] =  nv50_software_oclass;
224ebb945a94bba2ce8dff7b0942ff2b3f2a52a0a69Ben Skeggs		device->oclass[NVDEV_ENGINE_GR     ] = &nv50_graph_oclass;
225ebb945a94bba2ce8dff7b0942ff2b3f2a52a0a69Ben Skeggs		device->oclass[NVDEV_ENGINE_MPEG   ] = &nv84_mpeg_oclass;
226ebb945a94bba2ce8dff7b0942ff2b3f2a52a0a69Ben Skeggs		device->oclass[NVDEV_ENGINE_VP     ] = &nv84_vp_oclass;
227ebb945a94bba2ce8dff7b0942ff2b3f2a52a0a69Ben Skeggs		device->oclass[NVDEV_ENGINE_CRYPT  ] = &nv84_crypt_oclass;
228ebb945a94bba2ce8dff7b0942ff2b3f2a52a0a69Ben Skeggs		device->oclass[NVDEV_ENGINE_BSP    ] = &nv84_bsp_oclass;
229a8f8b4891d26c430a18aad6cce561e8d50e85b10Ben Skeggs		device->oclass[NVDEV_ENGINE_DISP   ] =  nv94_disp_oclass;
230aa4d7a4d55ab375b2f1c894ba680186e4a7c6fd6Ben Skeggs		device->oclass[NVDEV_ENGINE_PERFMON] =  nv84_perfmon_oclass;
2319274f4a9ba7e70d1770e237fca16d52f27f0c728Ben Skeggs		break;
2329274f4a9ba7e70d1770e237fca16d52f27f0c728Ben Skeggs	case 0x98:
2332094dd82eddc468b53ee99d92c38b23a65efac03Ben Skeggs		device->cname = "G98";
23470c0f263cc2eb12e02506eb75f0a71490e7dea4dBen Skeggs		device->oclass[NVDEV_SUBDEV_VBIOS  ] = &nouveau_bios_oclass;
235b485a7005faba38286bc02ab1d80e2cbf61c1002Emil Velikov		device->oclass[NVDEV_SUBDEV_GPIO   ] =  nv94_gpio_oclass;
236c26fe843560fe01b4b652ee21952d33f60f4e699Ben Skeggs		device->oclass[NVDEV_SUBDEV_I2C    ] =  nv94_i2c_oclass;
2373ca6cd435effd1d762217529baaab010f34f8cc8Martin Peres		device->oclass[NVDEV_SUBDEV_FUSE   ] =  &g80_fuse_oclass;
2387c856522069755ab9d163a24ac332cd3cb35fe30Ben Skeggs		device->oclass[NVDEV_SUBDEV_CLOCK  ] =  nv84_clock_oclass;
2392f4573679a8159e0c80a5d4f812b778aef9ceb14Martin Peres		device->oclass[NVDEV_SUBDEV_THERM  ] = &nv84_therm_oclass;
240d38ac5217ab43cf61e8ebe6d7114fb2d1ca9a3a4Ben Skeggs		device->oclass[NVDEV_SUBDEV_MXM    ] = &nv50_mxm_oclass;
2414019aaa2b314a5be9886ae1db64ff8c6d3c060edIlia Mirkin		device->oclass[NVDEV_SUBDEV_DEVINIT] =  nv98_devinit_oclass;
24208f6fbdb9bef0f9f920a8531addb0952c293d4c9Ben Skeggs		device->oclass[NVDEV_SUBDEV_MC     ] =  nv98_mc_oclass;
2432984506fb6172712f83e573319baf7dbd0eb9028Ben Skeggs		device->oclass[NVDEV_SUBDEV_BUS    ] =  nv94_bus_oclass;
2445a5c7432bbbd2e318dff107b4ff960ab543a7cefBen Skeggs		device->oclass[NVDEV_SUBDEV_TIMER  ] = &nv04_timer_oclass;
2459ca3037e60924c8fcb53977d72efa493c821eec5Ben Skeggs		device->oclass[NVDEV_SUBDEV_FB     ] =  nv84_fb_oclass;
24624a4ae86de89b5cbbf8530c371007383de9f2d58Ben Skeggs		device->oclass[NVDEV_SUBDEV_INSTMEM] =  nv50_instmem_oclass;
2473863c9bc887e9638a9d905d55f6038641ece78d6Ben Skeggs		device->oclass[NVDEV_SUBDEV_VM     ] = &nv50_vmmgr_oclass;
2483863c9bc887e9638a9d905d55f6038641ece78d6Ben Skeggs		device->oclass[NVDEV_SUBDEV_BAR    ] = &nv50_bar_oclass;
249c9c0ccae48e27b767e98a4c120976e43195dd3a7Ben Skeggs		device->oclass[NVDEV_SUBDEV_VOLT   ] = &nv40_volt_oclass;
250bc98540b7b506689a9bd7bedffb9f60f9c62d945Ben Skeggs		device->oclass[NVDEV_ENGINE_DMAOBJ ] =  nv50_dmaeng_oclass;
25116c4f227ffc556a4851518092e2b5979da1280c1Ben Skeggs		device->oclass[NVDEV_ENGINE_FIFO   ] =  nv84_fifo_oclass;
252c46c3ddf1f5bbc4fbd2cd661a9e8f0ba3daf5298Ben Skeggs		device->oclass[NVDEV_ENGINE_SW     ] =  nv50_software_oclass;
253ebb945a94bba2ce8dff7b0942ff2b3f2a52a0a69Ben Skeggs		device->oclass[NVDEV_ENGINE_GR     ] = &nv50_graph_oclass;
2540d4a1450c95801c21ba4db109303fbad62378b91Ilia Mirkin		device->oclass[NVDEV_ENGINE_VP     ] = &nv98_vp_oclass;
255ebb945a94bba2ce8dff7b0942ff2b3f2a52a0a69Ben Skeggs		device->oclass[NVDEV_ENGINE_CRYPT  ] = &nv98_crypt_oclass;
2560d4a1450c95801c21ba4db109303fbad62378b91Ilia Mirkin		device->oclass[NVDEV_ENGINE_BSP    ] = &nv98_bsp_oclass;
257ebb945a94bba2ce8dff7b0942ff2b3f2a52a0a69Ben Skeggs		device->oclass[NVDEV_ENGINE_PPP    ] = &nv98_ppp_oclass;
258a8f8b4891d26c430a18aad6cce561e8d50e85b10Ben Skeggs		device->oclass[NVDEV_ENGINE_DISP   ] =  nv94_disp_oclass;
259aa4d7a4d55ab375b2f1c894ba680186e4a7c6fd6Ben Skeggs		device->oclass[NVDEV_ENGINE_PERFMON] =  nv84_perfmon_oclass;
2609274f4a9ba7e70d1770e237fca16d52f27f0c728Ben Skeggs		break;
2619274f4a9ba7e70d1770e237fca16d52f27f0c728Ben Skeggs	case 0xa0:
2622094dd82eddc468b53ee99d92c38b23a65efac03Ben Skeggs		device->cname = "G200";
26370c0f263cc2eb12e02506eb75f0a71490e7dea4dBen Skeggs		device->oclass[NVDEV_SUBDEV_VBIOS  ] = &nouveau_bios_oclass;
264b485a7005faba38286bc02ab1d80e2cbf61c1002Emil Velikov		device->oclass[NVDEV_SUBDEV_GPIO   ] =  nv94_gpio_oclass;
265c26fe843560fe01b4b652ee21952d33f60f4e699Ben Skeggs		device->oclass[NVDEV_SUBDEV_I2C    ] =  nv50_i2c_oclass;
2663ca6cd435effd1d762217529baaab010f34f8cc8Martin Peres		device->oclass[NVDEV_SUBDEV_FUSE   ] =  &g80_fuse_oclass;
2677c856522069755ab9d163a24ac332cd3cb35fe30Ben Skeggs		device->oclass[NVDEV_SUBDEV_CLOCK  ] =  nv84_clock_oclass;
2682f4573679a8159e0c80a5d4f812b778aef9ceb14Martin Peres		device->oclass[NVDEV_SUBDEV_THERM  ] = &nv84_therm_oclass;
269d38ac5217ab43cf61e8ebe6d7114fb2d1ca9a3a4Ben Skeggs		device->oclass[NVDEV_SUBDEV_MXM    ] = &nv50_mxm_oclass;
2704019aaa2b314a5be9886ae1db64ff8c6d3c060edIlia Mirkin		device->oclass[NVDEV_SUBDEV_DEVINIT] =  nv84_devinit_oclass;
27108f6fbdb9bef0f9f920a8531addb0952c293d4c9Ben Skeggs		device->oclass[NVDEV_SUBDEV_MC     ] =  nv98_mc_oclass;
2722984506fb6172712f83e573319baf7dbd0eb9028Ben Skeggs		device->oclass[NVDEV_SUBDEV_BUS    ] =  nv94_bus_oclass;
2735a5c7432bbbd2e318dff107b4ff960ab543a7cefBen Skeggs		device->oclass[NVDEV_SUBDEV_TIMER  ] = &nv04_timer_oclass;
2749ca3037e60924c8fcb53977d72efa493c821eec5Ben Skeggs		device->oclass[NVDEV_SUBDEV_FB     ] =  nv84_fb_oclass;
27524a4ae86de89b5cbbf8530c371007383de9f2d58Ben Skeggs		device->oclass[NVDEV_SUBDEV_INSTMEM] =  nv50_instmem_oclass;
2763863c9bc887e9638a9d905d55f6038641ece78d6Ben Skeggs		device->oclass[NVDEV_SUBDEV_VM     ] = &nv50_vmmgr_oclass;
2773863c9bc887e9638a9d905d55f6038641ece78d6Ben Skeggs		device->oclass[NVDEV_SUBDEV_BAR    ] = &nv50_bar_oclass;
278c9c0ccae48e27b767e98a4c120976e43195dd3a7Ben Skeggs		device->oclass[NVDEV_SUBDEV_VOLT   ] = &nv40_volt_oclass;
279bc98540b7b506689a9bd7bedffb9f60f9c62d945Ben Skeggs		device->oclass[NVDEV_ENGINE_DMAOBJ ] =  nv50_dmaeng_oclass;
28016c4f227ffc556a4851518092e2b5979da1280c1Ben Skeggs		device->oclass[NVDEV_ENGINE_FIFO   ] =  nv84_fifo_oclass;
281c46c3ddf1f5bbc4fbd2cd661a9e8f0ba3daf5298Ben Skeggs		device->oclass[NVDEV_ENGINE_SW     ] =  nv50_software_oclass;
282ebb945a94bba2ce8dff7b0942ff2b3f2a52a0a69Ben Skeggs		device->oclass[NVDEV_ENGINE_GR     ] = &nv50_graph_oclass;
283ebb945a94bba2ce8dff7b0942ff2b3f2a52a0a69Ben Skeggs		device->oclass[NVDEV_ENGINE_MPEG   ] = &nv84_mpeg_oclass;
284ebb945a94bba2ce8dff7b0942ff2b3f2a52a0a69Ben Skeggs		device->oclass[NVDEV_ENGINE_VP     ] = &nv84_vp_oclass;
285ebb945a94bba2ce8dff7b0942ff2b3f2a52a0a69Ben Skeggs		device->oclass[NVDEV_ENGINE_CRYPT  ] = &nv84_crypt_oclass;
286ebb945a94bba2ce8dff7b0942ff2b3f2a52a0a69Ben Skeggs		device->oclass[NVDEV_ENGINE_BSP    ] = &nv84_bsp_oclass;
287a8f8b4891d26c430a18aad6cce561e8d50e85b10Ben Skeggs		device->oclass[NVDEV_ENGINE_DISP   ] =  nva0_disp_oclass;
288aa4d7a4d55ab375b2f1c894ba680186e4a7c6fd6Ben Skeggs		device->oclass[NVDEV_ENGINE_PERFMON] =  nv84_perfmon_oclass;
2899274f4a9ba7e70d1770e237fca16d52f27f0c728Ben Skeggs		break;
2909274f4a9ba7e70d1770e237fca16d52f27f0c728Ben Skeggs	case 0xaa:
2912094dd82eddc468b53ee99d92c38b23a65efac03Ben Skeggs		device->cname = "MCP77/MCP78";
29270c0f263cc2eb12e02506eb75f0a71490e7dea4dBen Skeggs		device->oclass[NVDEV_SUBDEV_VBIOS  ] = &nouveau_bios_oclass;
293b485a7005faba38286bc02ab1d80e2cbf61c1002Emil Velikov		device->oclass[NVDEV_SUBDEV_GPIO   ] =  nv94_gpio_oclass;
294c26fe843560fe01b4b652ee21952d33f60f4e699Ben Skeggs		device->oclass[NVDEV_SUBDEV_I2C    ] =  nv94_i2c_oclass;
2953ca6cd435effd1d762217529baaab010f34f8cc8Martin Peres		device->oclass[NVDEV_SUBDEV_FUSE   ] =  &g80_fuse_oclass;
296a7e4201f0f7d47e03b851f06f8987856e8d33083Roy Spliet		device->oclass[NVDEV_SUBDEV_CLOCK  ] =  nvaa_clock_oclass;
2972f4573679a8159e0c80a5d4f812b778aef9ceb14Martin Peres		device->oclass[NVDEV_SUBDEV_THERM  ] = &nv84_therm_oclass;
298d38ac5217ab43cf61e8ebe6d7114fb2d1ca9a3a4Ben Skeggs		device->oclass[NVDEV_SUBDEV_MXM    ] = &nv50_mxm_oclass;
2994019aaa2b314a5be9886ae1db64ff8c6d3c060edIlia Mirkin		device->oclass[NVDEV_SUBDEV_DEVINIT] =  nv98_devinit_oclass;
30008f6fbdb9bef0f9f920a8531addb0952c293d4c9Ben Skeggs		device->oclass[NVDEV_SUBDEV_MC     ] =  nv98_mc_oclass;
3012984506fb6172712f83e573319baf7dbd0eb9028Ben Skeggs		device->oclass[NVDEV_SUBDEV_BUS    ] =  nv94_bus_oclass;
3025a5c7432bbbd2e318dff107b4ff960ab543a7cefBen Skeggs		device->oclass[NVDEV_SUBDEV_TIMER  ] = &nv04_timer_oclass;
3039ca3037e60924c8fcb53977d72efa493c821eec5Ben Skeggs		device->oclass[NVDEV_SUBDEV_FB     ] =  nvaa_fb_oclass;
30424a4ae86de89b5cbbf8530c371007383de9f2d58Ben Skeggs		device->oclass[NVDEV_SUBDEV_INSTMEM] =  nv50_instmem_oclass;
3053863c9bc887e9638a9d905d55f6038641ece78d6Ben Skeggs		device->oclass[NVDEV_SUBDEV_VM     ] = &nv50_vmmgr_oclass;
3063863c9bc887e9638a9d905d55f6038641ece78d6Ben Skeggs		device->oclass[NVDEV_SUBDEV_BAR    ] = &nv50_bar_oclass;
307c9c0ccae48e27b767e98a4c120976e43195dd3a7Ben Skeggs		device->oclass[NVDEV_SUBDEV_VOLT   ] = &nv40_volt_oclass;
308bc98540b7b506689a9bd7bedffb9f60f9c62d945Ben Skeggs		device->oclass[NVDEV_ENGINE_DMAOBJ ] =  nv50_dmaeng_oclass;
30916c4f227ffc556a4851518092e2b5979da1280c1Ben Skeggs		device->oclass[NVDEV_ENGINE_FIFO   ] =  nv84_fifo_oclass;
310c46c3ddf1f5bbc4fbd2cd661a9e8f0ba3daf5298Ben Skeggs		device->oclass[NVDEV_ENGINE_SW     ] =  nv50_software_oclass;
311ebb945a94bba2ce8dff7b0942ff2b3f2a52a0a69Ben Skeggs		device->oclass[NVDEV_ENGINE_GR     ] = &nv50_graph_oclass;
3120d4a1450c95801c21ba4db109303fbad62378b91Ilia Mirkin		device->oclass[NVDEV_ENGINE_VP     ] = &nv98_vp_oclass;
313ebb945a94bba2ce8dff7b0942ff2b3f2a52a0a69Ben Skeggs		device->oclass[NVDEV_ENGINE_CRYPT  ] = &nv98_crypt_oclass;
3140d4a1450c95801c21ba4db109303fbad62378b91Ilia Mirkin		device->oclass[NVDEV_ENGINE_BSP    ] = &nv98_bsp_oclass;
315ebb945a94bba2ce8dff7b0942ff2b3f2a52a0a69Ben Skeggs		device->oclass[NVDEV_ENGINE_PPP    ] = &nv98_ppp_oclass;
316a8f8b4891d26c430a18aad6cce561e8d50e85b10Ben Skeggs		device->oclass[NVDEV_ENGINE_DISP   ] =  nv94_disp_oclass;
317aa4d7a4d55ab375b2f1c894ba680186e4a7c6fd6Ben Skeggs		device->oclass[NVDEV_ENGINE_PERFMON] =  nv84_perfmon_oclass;
3189274f4a9ba7e70d1770e237fca16d52f27f0c728Ben Skeggs		break;
3199274f4a9ba7e70d1770e237fca16d52f27f0c728Ben Skeggs	case 0xac:
3202094dd82eddc468b53ee99d92c38b23a65efac03Ben Skeggs		device->cname = "MCP79/MCP7A";
32170c0f263cc2eb12e02506eb75f0a71490e7dea4dBen Skeggs		device->oclass[NVDEV_SUBDEV_VBIOS  ] = &nouveau_bios_oclass;
322b485a7005faba38286bc02ab1d80e2cbf61c1002Emil Velikov		device->oclass[NVDEV_SUBDEV_GPIO   ] =  nv94_gpio_oclass;
323c26fe843560fe01b4b652ee21952d33f60f4e699Ben Skeggs		device->oclass[NVDEV_SUBDEV_I2C    ] =  nv94_i2c_oclass;
3243ca6cd435effd1d762217529baaab010f34f8cc8Martin Peres		device->oclass[NVDEV_SUBDEV_FUSE   ] =  &g80_fuse_oclass;
325a7e4201f0f7d47e03b851f06f8987856e8d33083Roy Spliet		device->oclass[NVDEV_SUBDEV_CLOCK  ] =  nvaa_clock_oclass;
3262f4573679a8159e0c80a5d4f812b778aef9ceb14Martin Peres		device->oclass[NVDEV_SUBDEV_THERM  ] = &nv84_therm_oclass;
327d38ac5217ab43cf61e8ebe6d7114fb2d1ca9a3a4Ben Skeggs		device->oclass[NVDEV_SUBDEV_MXM    ] = &nv50_mxm_oclass;
3284019aaa2b314a5be9886ae1db64ff8c6d3c060edIlia Mirkin		device->oclass[NVDEV_SUBDEV_DEVINIT] =  nv98_devinit_oclass;
32908f6fbdb9bef0f9f920a8531addb0952c293d4c9Ben Skeggs		device->oclass[NVDEV_SUBDEV_MC     ] =  nv98_mc_oclass;
3302984506fb6172712f83e573319baf7dbd0eb9028Ben Skeggs		device->oclass[NVDEV_SUBDEV_BUS    ] =  nv94_bus_oclass;
3315a5c7432bbbd2e318dff107b4ff960ab543a7cefBen Skeggs		device->oclass[NVDEV_SUBDEV_TIMER  ] = &nv04_timer_oclass;
3329ca3037e60924c8fcb53977d72efa493c821eec5Ben Skeggs		device->oclass[NVDEV_SUBDEV_FB     ] =  nvaa_fb_oclass;
33324a4ae86de89b5cbbf8530c371007383de9f2d58Ben Skeggs		device->oclass[NVDEV_SUBDEV_INSTMEM] =  nv50_instmem_oclass;
3343863c9bc887e9638a9d905d55f6038641ece78d6Ben Skeggs		device->oclass[NVDEV_SUBDEV_VM     ] = &nv50_vmmgr_oclass;
3353863c9bc887e9638a9d905d55f6038641ece78d6Ben Skeggs		device->oclass[NVDEV_SUBDEV_BAR    ] = &nv50_bar_oclass;
336c9c0ccae48e27b767e98a4c120976e43195dd3a7Ben Skeggs		device->oclass[NVDEV_SUBDEV_VOLT   ] = &nv40_volt_oclass;
337bc98540b7b506689a9bd7bedffb9f60f9c62d945Ben Skeggs		device->oclass[NVDEV_ENGINE_DMAOBJ ] =  nv50_dmaeng_oclass;
33816c4f227ffc556a4851518092e2b5979da1280c1Ben Skeggs		device->oclass[NVDEV_ENGINE_FIFO   ] =  nv84_fifo_oclass;
339c46c3ddf1f5bbc4fbd2cd661a9e8f0ba3daf5298Ben Skeggs		device->oclass[NVDEV_ENGINE_SW     ] =  nv50_software_oclass;
340ebb945a94bba2ce8dff7b0942ff2b3f2a52a0a69Ben Skeggs		device->oclass[NVDEV_ENGINE_GR     ] = &nv50_graph_oclass;
3410d4a1450c95801c21ba4db109303fbad62378b91Ilia Mirkin		device->oclass[NVDEV_ENGINE_VP     ] = &nv98_vp_oclass;
342ebb945a94bba2ce8dff7b0942ff2b3f2a52a0a69Ben Skeggs		device->oclass[NVDEV_ENGINE_CRYPT  ] = &nv98_crypt_oclass;
3430d4a1450c95801c21ba4db109303fbad62378b91Ilia Mirkin		device->oclass[NVDEV_ENGINE_BSP    ] = &nv98_bsp_oclass;
344ebb945a94bba2ce8dff7b0942ff2b3f2a52a0a69Ben Skeggs		device->oclass[NVDEV_ENGINE_PPP    ] = &nv98_ppp_oclass;
345a8f8b4891d26c430a18aad6cce561e8d50e85b10Ben Skeggs		device->oclass[NVDEV_ENGINE_DISP   ] =  nv94_disp_oclass;
346aa4d7a4d55ab375b2f1c894ba680186e4a7c6fd6Ben Skeggs		device->oclass[NVDEV_ENGINE_PERFMON] =  nv84_perfmon_oclass;
3479274f4a9ba7e70d1770e237fca16d52f27f0c728Ben Skeggs		break;
3489274f4a9ba7e70d1770e237fca16d52f27f0c728Ben Skeggs	case 0xa3:
3492094dd82eddc468b53ee99d92c38b23a65efac03Ben Skeggs		device->cname = "GT215";
35070c0f263cc2eb12e02506eb75f0a71490e7dea4dBen Skeggs		device->oclass[NVDEV_SUBDEV_VBIOS  ] = &nouveau_bios_oclass;
351b485a7005faba38286bc02ab1d80e2cbf61c1002Emil Velikov		device->oclass[NVDEV_SUBDEV_GPIO   ] =  nv94_gpio_oclass;
352c26fe843560fe01b4b652ee21952d33f60f4e699Ben Skeggs		device->oclass[NVDEV_SUBDEV_I2C    ] =  nv94_i2c_oclass;
3533ca6cd435effd1d762217529baaab010f34f8cc8Martin Peres		device->oclass[NVDEV_SUBDEV_FUSE   ] =  &g80_fuse_oclass;
3548aceb7de47ea2491abc1a577dc875b19e9947a54Ben Skeggs		device->oclass[NVDEV_SUBDEV_CLOCK  ] = &nva3_clock_oclass;
3557b49bd684cea3916405e1de2f8173ac42cebc87bBen Skeggs		device->oclass[NVDEV_SUBDEV_THERM  ] = &nva3_therm_oclass;
356d38ac5217ab43cf61e8ebe6d7114fb2d1ca9a3a4Ben Skeggs		device->oclass[NVDEV_SUBDEV_MXM    ] = &nv50_mxm_oclass;
357cf336014c6dc3ef1431d84b5a94e47a22660493bBen Skeggs		device->oclass[NVDEV_SUBDEV_DEVINIT] =  nva3_devinit_oclass;
35808f6fbdb9bef0f9f920a8531addb0952c293d4c9Ben Skeggs		device->oclass[NVDEV_SUBDEV_MC     ] =  nv98_mc_oclass;
3592984506fb6172712f83e573319baf7dbd0eb9028Ben Skeggs		device->oclass[NVDEV_SUBDEV_BUS    ] =  nv94_bus_oclass;
3605a5c7432bbbd2e318dff107b4ff960ab543a7cefBen Skeggs		device->oclass[NVDEV_SUBDEV_TIMER  ] = &nv04_timer_oclass;
3619ca3037e60924c8fcb53977d72efa493c821eec5Ben Skeggs		device->oclass[NVDEV_SUBDEV_FB     ] =  nva3_fb_oclass;
36224a4ae86de89b5cbbf8530c371007383de9f2d58Ben Skeggs		device->oclass[NVDEV_SUBDEV_INSTMEM] =  nv50_instmem_oclass;
3633863c9bc887e9638a9d905d55f6038641ece78d6Ben Skeggs		device->oclass[NVDEV_SUBDEV_VM     ] = &nv50_vmmgr_oclass;
3643863c9bc887e9638a9d905d55f6038641ece78d6Ben Skeggs		device->oclass[NVDEV_SUBDEV_BAR    ] = &nv50_bar_oclass;
365adec9bc3bd5f2618cea5ab8dccc506b86ab4aabbBen Skeggs		device->oclass[NVDEV_SUBDEV_PWR    ] =  nva3_pwr_oclass;
366c9c0ccae48e27b767e98a4c120976e43195dd3a7Ben Skeggs		device->oclass[NVDEV_SUBDEV_VOLT   ] = &nv40_volt_oclass;
367bc98540b7b506689a9bd7bedffb9f60f9c62d945Ben Skeggs		device->oclass[NVDEV_ENGINE_DMAOBJ ] =  nv50_dmaeng_oclass;
36816c4f227ffc556a4851518092e2b5979da1280c1Ben Skeggs		device->oclass[NVDEV_ENGINE_FIFO   ] =  nv84_fifo_oclass;
369c46c3ddf1f5bbc4fbd2cd661a9e8f0ba3daf5298Ben Skeggs		device->oclass[NVDEV_ENGINE_SW     ] =  nv50_software_oclass;
370ebb945a94bba2ce8dff7b0942ff2b3f2a52a0a69Ben Skeggs		device->oclass[NVDEV_ENGINE_GR     ] = &nv50_graph_oclass;
371ebb945a94bba2ce8dff7b0942ff2b3f2a52a0a69Ben Skeggs		device->oclass[NVDEV_ENGINE_MPEG   ] = &nv84_mpeg_oclass;
3720d4a1450c95801c21ba4db109303fbad62378b91Ilia Mirkin		device->oclass[NVDEV_ENGINE_VP     ] = &nv98_vp_oclass;
3730d4a1450c95801c21ba4db109303fbad62378b91Ilia Mirkin		device->oclass[NVDEV_ENGINE_BSP    ] = &nv98_bsp_oclass;
374ebb945a94bba2ce8dff7b0942ff2b3f2a52a0a69Ben Skeggs		device->oclass[NVDEV_ENGINE_PPP    ] = &nv98_ppp_oclass;
375ebb945a94bba2ce8dff7b0942ff2b3f2a52a0a69Ben Skeggs		device->oclass[NVDEV_ENGINE_COPY0  ] = &nva3_copy_oclass;
376a8f8b4891d26c430a18aad6cce561e8d50e85b10Ben Skeggs		device->oclass[NVDEV_ENGINE_DISP   ] =  nva3_disp_oclass;
377aa4d7a4d55ab375b2f1c894ba680186e4a7c6fd6Ben Skeggs		device->oclass[NVDEV_ENGINE_PERFMON] =  nva3_perfmon_oclass;
3789274f4a9ba7e70d1770e237fca16d52f27f0c728Ben Skeggs		break;
3799274f4a9ba7e70d1770e237fca16d52f27f0c728Ben Skeggs	case 0xa5:
3802094dd82eddc468b53ee99d92c38b23a65efac03Ben Skeggs		device->cname = "GT216";
38170c0f263cc2eb12e02506eb75f0a71490e7dea4dBen Skeggs		device->oclass[NVDEV_SUBDEV_VBIOS  ] = &nouveau_bios_oclass;
382b485a7005faba38286bc02ab1d80e2cbf61c1002Emil Velikov		device->oclass[NVDEV_SUBDEV_GPIO   ] =  nv94_gpio_oclass;
383c26fe843560fe01b4b652ee21952d33f60f4e699Ben Skeggs		device->oclass[NVDEV_SUBDEV_I2C    ] =  nv94_i2c_oclass;
3843ca6cd435effd1d762217529baaab010f34f8cc8Martin Peres		device->oclass[NVDEV_SUBDEV_FUSE   ] =  &g80_fuse_oclass;
3858aceb7de47ea2491abc1a577dc875b19e9947a54Ben Skeggs		device->oclass[NVDEV_SUBDEV_CLOCK  ] = &nva3_clock_oclass;
3867b49bd684cea3916405e1de2f8173ac42cebc87bBen Skeggs		device->oclass[NVDEV_SUBDEV_THERM  ] = &nva3_therm_oclass;
387d38ac5217ab43cf61e8ebe6d7114fb2d1ca9a3a4Ben Skeggs		device->oclass[NVDEV_SUBDEV_MXM    ] = &nv50_mxm_oclass;
388cf336014c6dc3ef1431d84b5a94e47a22660493bBen Skeggs		device->oclass[NVDEV_SUBDEV_DEVINIT] =  nva3_devinit_oclass;
38908f6fbdb9bef0f9f920a8531addb0952c293d4c9Ben Skeggs		device->oclass[NVDEV_SUBDEV_MC     ] =  nv98_mc_oclass;
3902984506fb6172712f83e573319baf7dbd0eb9028Ben Skeggs		device->oclass[NVDEV_SUBDEV_BUS    ] =  nv94_bus_oclass;
3915a5c7432bbbd2e318dff107b4ff960ab543a7cefBen Skeggs		device->oclass[NVDEV_SUBDEV_TIMER  ] = &nv04_timer_oclass;
3929ca3037e60924c8fcb53977d72efa493c821eec5Ben Skeggs		device->oclass[NVDEV_SUBDEV_FB     ] =  nva3_fb_oclass;
39324a4ae86de89b5cbbf8530c371007383de9f2d58Ben Skeggs		device->oclass[NVDEV_SUBDEV_INSTMEM] =  nv50_instmem_oclass;
3943863c9bc887e9638a9d905d55f6038641ece78d6Ben Skeggs		device->oclass[NVDEV_SUBDEV_VM     ] = &nv50_vmmgr_oclass;
3953863c9bc887e9638a9d905d55f6038641ece78d6Ben Skeggs		device->oclass[NVDEV_SUBDEV_BAR    ] = &nv50_bar_oclass;
396adec9bc3bd5f2618cea5ab8dccc506b86ab4aabbBen Skeggs		device->oclass[NVDEV_SUBDEV_PWR    ] =  nva3_pwr_oclass;
397c9c0ccae48e27b767e98a4c120976e43195dd3a7Ben Skeggs		device->oclass[NVDEV_SUBDEV_VOLT   ] = &nv40_volt_oclass;
398bc98540b7b506689a9bd7bedffb9f60f9c62d945Ben Skeggs		device->oclass[NVDEV_ENGINE_DMAOBJ ] =  nv50_dmaeng_oclass;
39916c4f227ffc556a4851518092e2b5979da1280c1Ben Skeggs		device->oclass[NVDEV_ENGINE_FIFO   ] =  nv84_fifo_oclass;
400c46c3ddf1f5bbc4fbd2cd661a9e8f0ba3daf5298Ben Skeggs		device->oclass[NVDEV_ENGINE_SW     ] =  nv50_software_oclass;
401ebb945a94bba2ce8dff7b0942ff2b3f2a52a0a69Ben Skeggs		device->oclass[NVDEV_ENGINE_GR     ] = &nv50_graph_oclass;
4020d4a1450c95801c21ba4db109303fbad62378b91Ilia Mirkin		device->oclass[NVDEV_ENGINE_VP     ] = &nv98_vp_oclass;
4030d4a1450c95801c21ba4db109303fbad62378b91Ilia Mirkin		device->oclass[NVDEV_ENGINE_BSP    ] = &nv98_bsp_oclass;
404ebb945a94bba2ce8dff7b0942ff2b3f2a52a0a69Ben Skeggs		device->oclass[NVDEV_ENGINE_PPP    ] = &nv98_ppp_oclass;
405ebb945a94bba2ce8dff7b0942ff2b3f2a52a0a69Ben Skeggs		device->oclass[NVDEV_ENGINE_COPY0  ] = &nva3_copy_oclass;
406a8f8b4891d26c430a18aad6cce561e8d50e85b10Ben Skeggs		device->oclass[NVDEV_ENGINE_DISP   ] =  nva3_disp_oclass;
407aa4d7a4d55ab375b2f1c894ba680186e4a7c6fd6Ben Skeggs		device->oclass[NVDEV_ENGINE_PERFMON] =  nva3_perfmon_oclass;
4089274f4a9ba7e70d1770e237fca16d52f27f0c728Ben Skeggs		break;
4099274f4a9ba7e70d1770e237fca16d52f27f0c728Ben Skeggs	case 0xa8:
4102094dd82eddc468b53ee99d92c38b23a65efac03Ben Skeggs		device->cname = "GT218";
41170c0f263cc2eb12e02506eb75f0a71490e7dea4dBen Skeggs		device->oclass[NVDEV_SUBDEV_VBIOS  ] = &nouveau_bios_oclass;
412b485a7005faba38286bc02ab1d80e2cbf61c1002Emil Velikov		device->oclass[NVDEV_SUBDEV_GPIO   ] =  nv94_gpio_oclass;
413c26fe843560fe01b4b652ee21952d33f60f4e699Ben Skeggs		device->oclass[NVDEV_SUBDEV_I2C    ] =  nv94_i2c_oclass;
4143ca6cd435effd1d762217529baaab010f34f8cc8Martin Peres		device->oclass[NVDEV_SUBDEV_FUSE   ] =  &g80_fuse_oclass;
4158aceb7de47ea2491abc1a577dc875b19e9947a54Ben Skeggs		device->oclass[NVDEV_SUBDEV_CLOCK  ] = &nva3_clock_oclass;
4167b49bd684cea3916405e1de2f8173ac42cebc87bBen Skeggs		device->oclass[NVDEV_SUBDEV_THERM  ] = &nva3_therm_oclass;
417d38ac5217ab43cf61e8ebe6d7114fb2d1ca9a3a4Ben Skeggs		device->oclass[NVDEV_SUBDEV_MXM    ] = &nv50_mxm_oclass;
418cf336014c6dc3ef1431d84b5a94e47a22660493bBen Skeggs		device->oclass[NVDEV_SUBDEV_DEVINIT] =  nva3_devinit_oclass;
41908f6fbdb9bef0f9f920a8531addb0952c293d4c9Ben Skeggs		device->oclass[NVDEV_SUBDEV_MC     ] =  nv98_mc_oclass;
4202984506fb6172712f83e573319baf7dbd0eb9028Ben Skeggs		device->oclass[NVDEV_SUBDEV_BUS    ] =  nv94_bus_oclass;
4215a5c7432bbbd2e318dff107b4ff960ab543a7cefBen Skeggs		device->oclass[NVDEV_SUBDEV_TIMER  ] = &nv04_timer_oclass;
4229ca3037e60924c8fcb53977d72efa493c821eec5Ben Skeggs		device->oclass[NVDEV_SUBDEV_FB     ] =  nva3_fb_oclass;
42324a4ae86de89b5cbbf8530c371007383de9f2d58Ben Skeggs		device->oclass[NVDEV_SUBDEV_INSTMEM] =  nv50_instmem_oclass;
4243863c9bc887e9638a9d905d55f6038641ece78d6Ben Skeggs		device->oclass[NVDEV_SUBDEV_VM     ] = &nv50_vmmgr_oclass;
4253863c9bc887e9638a9d905d55f6038641ece78d6Ben Skeggs		device->oclass[NVDEV_SUBDEV_BAR    ] = &nv50_bar_oclass;
426adec9bc3bd5f2618cea5ab8dccc506b86ab4aabbBen Skeggs		device->oclass[NVDEV_SUBDEV_PWR    ] =  nva3_pwr_oclass;
427c9c0ccae48e27b767e98a4c120976e43195dd3a7Ben Skeggs		device->oclass[NVDEV_SUBDEV_VOLT   ] = &nv40_volt_oclass;
428bc98540b7b506689a9bd7bedffb9f60f9c62d945Ben Skeggs		device->oclass[NVDEV_ENGINE_DMAOBJ ] =  nv50_dmaeng_oclass;
42916c4f227ffc556a4851518092e2b5979da1280c1Ben Skeggs		device->oclass[NVDEV_ENGINE_FIFO   ] =  nv84_fifo_oclass;
430c46c3ddf1f5bbc4fbd2cd661a9e8f0ba3daf5298Ben Skeggs		device->oclass[NVDEV_ENGINE_SW     ] =  nv50_software_oclass;
431ebb945a94bba2ce8dff7b0942ff2b3f2a52a0a69Ben Skeggs		device->oclass[NVDEV_ENGINE_GR     ] = &nv50_graph_oclass;
4320d4a1450c95801c21ba4db109303fbad62378b91Ilia Mirkin		device->oclass[NVDEV_ENGINE_VP     ] = &nv98_vp_oclass;
4330d4a1450c95801c21ba4db109303fbad62378b91Ilia Mirkin		device->oclass[NVDEV_ENGINE_BSP    ] = &nv98_bsp_oclass;
434ebb945a94bba2ce8dff7b0942ff2b3f2a52a0a69Ben Skeggs		device->oclass[NVDEV_ENGINE_PPP    ] = &nv98_ppp_oclass;
435ebb945a94bba2ce8dff7b0942ff2b3f2a52a0a69Ben Skeggs		device->oclass[NVDEV_ENGINE_COPY0  ] = &nva3_copy_oclass;
436a8f8b4891d26c430a18aad6cce561e8d50e85b10Ben Skeggs		device->oclass[NVDEV_ENGINE_DISP   ] =  nva3_disp_oclass;
437aa4d7a4d55ab375b2f1c894ba680186e4a7c6fd6Ben Skeggs		device->oclass[NVDEV_ENGINE_PERFMON] =  nva3_perfmon_oclass;
4389274f4a9ba7e70d1770e237fca16d52f27f0c728Ben Skeggs		break;
4399274f4a9ba7e70d1770e237fca16d52f27f0c728Ben Skeggs	case 0xaf:
4402094dd82eddc468b53ee99d92c38b23a65efac03Ben Skeggs		device->cname = "MCP89";
44170c0f263cc2eb12e02506eb75f0a71490e7dea4dBen Skeggs		device->oclass[NVDEV_SUBDEV_VBIOS  ] = &nouveau_bios_oclass;
442b485a7005faba38286bc02ab1d80e2cbf61c1002Emil Velikov		device->oclass[NVDEV_SUBDEV_GPIO   ] =  nv94_gpio_oclass;
443c26fe843560fe01b4b652ee21952d33f60f4e699Ben Skeggs		device->oclass[NVDEV_SUBDEV_I2C    ] =  nv94_i2c_oclass;
4443ca6cd435effd1d762217529baaab010f34f8cc8Martin Peres		device->oclass[NVDEV_SUBDEV_FUSE   ] =  &g80_fuse_oclass;
4458aceb7de47ea2491abc1a577dc875b19e9947a54Ben Skeggs		device->oclass[NVDEV_SUBDEV_CLOCK  ] = &nva3_clock_oclass;
4467b49bd684cea3916405e1de2f8173ac42cebc87bBen Skeggs		device->oclass[NVDEV_SUBDEV_THERM  ] = &nva3_therm_oclass;
447d38ac5217ab43cf61e8ebe6d7114fb2d1ca9a3a4Ben Skeggs		device->oclass[NVDEV_SUBDEV_MXM    ] = &nv50_mxm_oclass;
4484019aaa2b314a5be9886ae1db64ff8c6d3c060edIlia Mirkin		device->oclass[NVDEV_SUBDEV_DEVINIT] =  nvaf_devinit_oclass;
44908f6fbdb9bef0f9f920a8531addb0952c293d4c9Ben Skeggs		device->oclass[NVDEV_SUBDEV_MC     ] =  nv98_mc_oclass;
4502984506fb6172712f83e573319baf7dbd0eb9028Ben Skeggs		device->oclass[NVDEV_SUBDEV_BUS    ] =  nv94_bus_oclass;
4515a5c7432bbbd2e318dff107b4ff960ab543a7cefBen Skeggs		device->oclass[NVDEV_SUBDEV_TIMER  ] = &nv04_timer_oclass;
4529ca3037e60924c8fcb53977d72efa493c821eec5Ben Skeggs		device->oclass[NVDEV_SUBDEV_FB     ] =  nvaf_fb_oclass;
45324a4ae86de89b5cbbf8530c371007383de9f2d58Ben Skeggs		device->oclass[NVDEV_SUBDEV_INSTMEM] =  nv50_instmem_oclass;
4543863c9bc887e9638a9d905d55f6038641ece78d6Ben Skeggs		device->oclass[NVDEV_SUBDEV_VM     ] = &nv50_vmmgr_oclass;
4553863c9bc887e9638a9d905d55f6038641ece78d6Ben Skeggs		device->oclass[NVDEV_SUBDEV_BAR    ] = &nv50_bar_oclass;
456adec9bc3bd5f2618cea5ab8dccc506b86ab4aabbBen Skeggs		device->oclass[NVDEV_SUBDEV_PWR    ] =  nva3_pwr_oclass;
457c9c0ccae48e27b767e98a4c120976e43195dd3a7Ben Skeggs		device->oclass[NVDEV_SUBDEV_VOLT   ] = &nv40_volt_oclass;
458bc98540b7b506689a9bd7bedffb9f60f9c62d945Ben Skeggs		device->oclass[NVDEV_ENGINE_DMAOBJ ] =  nv50_dmaeng_oclass;
45916c4f227ffc556a4851518092e2b5979da1280c1Ben Skeggs		device->oclass[NVDEV_ENGINE_FIFO   ] =  nv84_fifo_oclass;
460c46c3ddf1f5bbc4fbd2cd661a9e8f0ba3daf5298Ben Skeggs		device->oclass[NVDEV_ENGINE_SW     ] =  nv50_software_oclass;
461ebb945a94bba2ce8dff7b0942ff2b3f2a52a0a69Ben Skeggs		device->oclass[NVDEV_ENGINE_GR     ] = &nv50_graph_oclass;
4620d4a1450c95801c21ba4db109303fbad62378b91Ilia Mirkin		device->oclass[NVDEV_ENGINE_VP     ] = &nv98_vp_oclass;
4630d4a1450c95801c21ba4db109303fbad62378b91Ilia Mirkin		device->oclass[NVDEV_ENGINE_BSP    ] = &nv98_bsp_oclass;
464ebb945a94bba2ce8dff7b0942ff2b3f2a52a0a69Ben Skeggs		device->oclass[NVDEV_ENGINE_PPP    ] = &nv98_ppp_oclass;
465ebb945a94bba2ce8dff7b0942ff2b3f2a52a0a69Ben Skeggs		device->oclass[NVDEV_ENGINE_COPY0  ] = &nva3_copy_oclass;
466a8f8b4891d26c430a18aad6cce561e8d50e85b10Ben Skeggs		device->oclass[NVDEV_ENGINE_DISP   ] =  nva3_disp_oclass;
467aa4d7a4d55ab375b2f1c894ba680186e4a7c6fd6Ben Skeggs		device->oclass[NVDEV_ENGINE_PERFMON] =  nva3_perfmon_oclass;
4689274f4a9ba7e70d1770e237fca16d52f27f0c728Ben Skeggs		break;
4699274f4a9ba7e70d1770e237fca16d52f27f0c728Ben Skeggs	default:
4709274f4a9ba7e70d1770e237fca16d52f27f0c728Ben Skeggs		nv_fatal(device, "unknown Tesla chipset\n");
4719274f4a9ba7e70d1770e237fca16d52f27f0c728Ben Skeggs		return -EINVAL;
4729274f4a9ba7e70d1770e237fca16d52f27f0c728Ben Skeggs	}
4739274f4a9ba7e70d1770e237fca16d52f27f0c728Ben Skeggs
4749274f4a9ba7e70d1770e237fca16d52f27f0c728Ben Skeggs	return 0;
4759274f4a9ba7e70d1770e237fca16d52f27f0c728Ben Skeggs}
476