comparison vidix/drivers/nvidia_vid.c @ 4126:5ee0a20cc791

started
author alex
date Sun, 13 Jan 2002 00:26:23 +0000
parents
children 8110b321f2ca
comparison
equal deleted inserted replaced
4125:88de258b3ea9 4126:5ee0a20cc791
1 #include <errno.h>
2 #include <stdio.h>
3 #include <stdlib.h>
4 #include <string.h>
5 #include <math.h>
6 #include <inttypes.h>
7
8 #include "../vidix.h"
9 #include "../fourcc.h"
10 #include "../../libdha/libdha.h"
11 #include "../../libdha/pci_ids.h"
12 #include "../../libdha/pci_names.h"
13
14 //#include "nvidia.h"
15
16 static void *mmio_base = 0;
17 static void *mem_base = 0;
18 static int32_t overlay_offset = 0;
19 static uint32_t ram_size = 0;
20
21 struct nv_card_id_s
22 {
23 const unsigned int id ;
24 const char name[17];
25 };
26
27 static const struct nv_card_id_s nv_card_ids[]=
28 {
29 { DEVICE_NVIDIA_RIVA_TNT2_NV5, "nVidia TNT2" },
30 };
31
32 static int find_chip(unsigned int chip_id)
33 {
34 unsigned int i;
35
36 for (i = 0; i < sizeof(nv_card_ids)/sizeof(struct nv_card_id_s); i++)
37 if (chip_id == nv_card_ids[i].id)
38 return(i);
39 return(-1);
40 }
41
42 static pciinfo_t pci_info;
43 static int probed = 0;
44
45 /* VIDIX exports */
46
47 static vidix_capability_t nvidia_cap =
48 {
49 "NVIDIA driver for VIDIX",
50 TYPE_OUTPUT,
51 0,
52 1,
53 0,
54 0,
55 1024,
56 768,
57 4,
58 4,
59 -1,
60 FLAG_NONE,
61 VENDOR_NVIDIA,
62 0,
63 { 0, 0, 0, 0 }
64 };
65
66 unsigned int vixGetVersion(void)
67 {
68 return(VIDIX_VERSION);
69 }
70
71 int vixProbe(int verbose)
72 {
73 pciinfo_t lst[MAX_PCI_DEVICES];
74 unsigned int i, num_pci;
75 int err;
76
77 printf("[nvidia] probe\n");
78
79 err = pci_scan(lst, &num_pci);
80 if (err)
81 {
82 printf("Error occured during pci scan: %s\n", strerror(err));
83 return err;
84 }
85 else
86 {
87 err = ENXIO;
88
89 for (i = 0; i < num_pci; i++)
90 {
91 if (lst[i].vendor == VENDOR_NVIDIA)
92 {
93 int idx;
94
95 idx = find_chip(lst[i].device);
96 if (idx == -1)
97 continue;
98 printf("Found chip: %s\n", nv_card_ids[idx].name);
99 nvidia_cap.device_id = nv_card_ids[idx].id;
100 err = 0;
101 memcpy(&pci_info, &lst[i], sizeof(pciinfo_t));
102 probed = 1;
103
104 printf("bus:card:func = %x:%x:%x\n",
105 pci_info.bus, pci_info.card, pci_info.func);
106 printf("vendor:device = %x:%x\n",
107 pci_info.vendor, pci_info.device);
108 printf("base0:base1:base2:baserom = %x:%x:%x:%x\n",
109 pci_info.base0, pci_info.base1, pci_info.base2,
110 pci_info.baserom);
111 break;
112 }
113 }
114 }
115
116 if (err)
117 printf("No chip found\n");
118 return(err);
119 }
120
121 int vixInit(void)
122 {
123 printf("[nvidia] init\n");
124
125 if (!probed)
126 {
127 printf("Driver was not probed but is being initialized\n");
128 return(EINTR);
129 }
130
131 mmio_base = map_phys_mem(pci_info.base0, 0xFFFF);
132 if (mmio_base == (void *)-1)
133 return(ENOMEM);
134
135 printf("mmio_base: %p\n", mmio_base);
136 return ENXIO;
137 }
138
139 void vixDestroy(void)
140 {
141 printf("[nvidia] destory\n");
142 }
143
144 int vixGetCapability(vidix_capability_t *to)
145 {
146 memcpy(to, &nvidia_cap, sizeof(vidix_capability_t));
147 return(0);
148 }
149
150 int vixQueryFourcc(vidix_fourcc_t *to)
151 {
152 printf("[nvidia] query fourcc (%x)\n", to->fourcc);
153 return 0;
154 }
155
156 int vixConfigPlayback(vidix_playback_t *info)
157 {
158 printf("[nvidia] config playback\n");
159
160 info->num_frames = 2;
161 info->frame_size = info->src.w*info->src.h+(info->src.w*info->src.h)/2;
162 info->dga_addr = malloc(info->num_frames*info->frame_size);
163 return 0;
164 }
165
166 int vixPlaybackOn(void)
167 {
168 printf("[nvidia] playback on\n");
169 return 0;
170 }
171
172 int vixPlaybackOff(void)
173 {
174 printf("[nvidia] playback off\n");
175 return 0;
176 }