Mercurial > mplayer.hg
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 } |