annotate libdha/libdha.c @ 4218:3931c41f740a

Added new syncengine thanks to a new previously undocumented feature of the em8300, this might fix playback on both slow and fast machines (more testing needed). This also requires users to get the em8300 driver from cvs until the next version is released (will probably happen this weekend) Added lots of comments, should be pretty easy to understand most of the internals now Added lots of brackets to if's for's while's etc, this is not a cosmetical thing but rather due to the fact I got some very odd bugs with else's since I didn't properly use brackets (and it's the K&R standard to have brackets everywhere) Fixed some bugs that would occur when disabling libmp1e Switched to default to the new naming scheme of device nodes, the driver will slowly switch over to this state, if it can't find devices under the new name it will try the old naming scheme I stopped opening devices in non-blocking mode, it would break the new syncengine which tries to burst data to the device (alot of times meaning it will fill the fifo pretty fast which would previously result in jerkyness on fast machines) The device now sets the initial state of the pts and speed (probably not needed, but assumption is the mother of all fuckups =) Keep the control interface open during the entire duration of the libvo device, we might need this to flush video buffers on seeking (currently not implemented, therefore seeking is broken) This is beta stuff to the driver, I will get some users to test it for me and do my best to fix seeking as soon as possible...
author mswitch
date Thu, 17 Jan 2002 10:33:47 +0000
parents 4cfb6b9a6da3
children 05ac3586db02
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
3973
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
1 /*
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
2 libgha.c - Library for direct hardware access
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
3 Copyrights:
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
4 1996/10/27 - Robin Cutshaw (robin@xfree86.org)
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
5 XFree86 3.3.3 implementation
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
6 1999 - Øyvind Aabling.
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
7 Modified for GATOS/win/gfxdump.
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
8
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
9 2002 - library implementation by Nick Kurshev
4174
4cfb6b9a6da3 api changed: enable/disable_os_io returns error-code (or zero if ok) and pciconfig_read exported for mga_vid
alex
parents: 4164
diff changeset
10 - some changes by Alex Beregszaszi
3973
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
11
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
12 supported O/S's: SVR4, UnixWare, SCO, Solaris,
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
13 FreeBSD, NetBSD, 386BSD, BSDI BSD/386,
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
14 Linux, Mach/386, ISC
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
15 DOS (WATCOM 9.5 compiler), Win9x (with mapdev.vxd)
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
16 Licence: GPL
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
17 Original location: www.linuxvideo.org/gatos
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
18 */
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
19
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
20 #include "libdha.h"
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
21 #include "AsmMacros.h"
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
22 #include <stdio.h>
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
23 #include <stdlib.h>
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
24 #include <string.h>
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
25 #include <fcntl.h>
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
26 #include <sys/stat.h>
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
27 #include <sys/types.h>
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
28 #include <unistd.h>
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
29
4174
4cfb6b9a6da3 api changed: enable/disable_os_io returns error-code (or zero if ok) and pciconfig_read exported for mga_vid
alex
parents: 4164
diff changeset
30 /* instead exit() use libdha_exit, and do the 'mother-application' deinit
4cfb6b9a6da3 api changed: enable/disable_os_io returns error-code (or zero if ok) and pciconfig_read exported for mga_vid
alex
parents: 4164
diff changeset
31 only in this code */
4cfb6b9a6da3 api changed: enable/disable_os_io returns error-code (or zero if ok) and pciconfig_read exported for mga_vid
alex
parents: 4164
diff changeset
32 void libdha_exit(const char *message, int level)
4cfb6b9a6da3 api changed: enable/disable_os_io returns error-code (or zero if ok) and pciconfig_read exported for mga_vid
alex
parents: 4164
diff changeset
33 {
4cfb6b9a6da3 api changed: enable/disable_os_io returns error-code (or zero if ok) and pciconfig_read exported for mga_vid
alex
parents: 4164
diff changeset
34 printf("libdha: FATAL: %s\n", message);
4cfb6b9a6da3 api changed: enable/disable_os_io returns error-code (or zero if ok) and pciconfig_read exported for mga_vid
alex
parents: 4164
diff changeset
35 exit(level); /* FIXME */
4cfb6b9a6da3 api changed: enable/disable_os_io returns error-code (or zero if ok) and pciconfig_read exported for mga_vid
alex
parents: 4164
diff changeset
36 }
4cfb6b9a6da3 api changed: enable/disable_os_io returns error-code (or zero if ok) and pciconfig_read exported for mga_vid
alex
parents: 4164
diff changeset
37
4164
2e3262002acb Improved readability and new stuffs
nick
parents: 3995
diff changeset
38 #if defined(_WIN32)
2e3262002acb Improved readability and new stuffs
nick
parents: 3995
diff changeset
39 #include "sysdep/libdha_win32.c"
2e3262002acb Improved readability and new stuffs
nick
parents: 3995
diff changeset
40 #elif defined (__EMX__)
2e3262002acb Improved readability and new stuffs
nick
parents: 3995
diff changeset
41 #include "sysdep/libdha_os2.c"
2e3262002acb Improved readability and new stuffs
nick
parents: 3995
diff changeset
42 #else
3973
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
43
4164
2e3262002acb Improved readability and new stuffs
nick
parents: 3995
diff changeset
44 #if defined(SVR4) || defined(SCO325)
2e3262002acb Improved readability and new stuffs
nick
parents: 3995
diff changeset
45 # if !(defined(sun) && defined (i386) && defined (SVR4))
2e3262002acb Improved readability and new stuffs
nick
parents: 3995
diff changeset
46 # define DEV_MEM "/dev/pmem"
2e3262002acb Improved readability and new stuffs
nick
parents: 3995
diff changeset
47 # elif defined(PowerMAX_OS)
2e3262002acb Improved readability and new stuffs
nick
parents: 3995
diff changeset
48 # define DEV_MEM "/dev/iomem"
2e3262002acb Improved readability and new stuffs
nick
parents: 3995
diff changeset
49 # endif
2e3262002acb Improved readability and new stuffs
nick
parents: 3995
diff changeset
50 # ifdef SCO325
2e3262002acb Improved readability and new stuffs
nick
parents: 3995
diff changeset
51 # undef DEV_MEM
2e3262002acb Improved readability and new stuffs
nick
parents: 3995
diff changeset
52 # define DEV_MEM "/dev/mem"
2e3262002acb Improved readability and new stuffs
nick
parents: 3995
diff changeset
53 # endif
2e3262002acb Improved readability and new stuffs
nick
parents: 3995
diff changeset
54 # endif /* SVR4 */
3973
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
55
4164
2e3262002acb Improved readability and new stuffs
nick
parents: 3995
diff changeset
56 /* Generic version */
2e3262002acb Improved readability and new stuffs
nick
parents: 3995
diff changeset
57 #include <sys/mman.h>
3973
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
58
4164
2e3262002acb Improved readability and new stuffs
nick
parents: 3995
diff changeset
59 #ifndef DEV_MEM
2e3262002acb Improved readability and new stuffs
nick
parents: 3995
diff changeset
60 #define DEV_MEM "/dev/mem"
2e3262002acb Improved readability and new stuffs
nick
parents: 3995
diff changeset
61 #endif
3973
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
62
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
63 static int mem=-1;
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
64 void *map_phys_mem(unsigned base, unsigned size)
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
65 {
4164
2e3262002acb Improved readability and new stuffs
nick
parents: 3995
diff changeset
66 if ( (mem = open(DEV_MEM,O_RDWR)) == -1) {
3973
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
67 perror("libdha: open(/dev/mem) failed") ; exit(1) ;
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
68 }
4164
2e3262002acb Improved readability and new stuffs
nick
parents: 3995
diff changeset
69 return mmap(0,size,PROT_READ|PROT_WRITE,MAP_SHARED,mem,base) ;
3973
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
70 }
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
71
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
72 void unmap_phys_mem(void *ptr, unsigned size)
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
73 {
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
74 int res=munmap(ptr,size) ;
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
75 if (res == -1) { perror("libdha: munmap() failed") ; exit(1) ; }
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
76 close(mem);
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
77 }
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
78 #endif
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
79
3995
0d9de811e312 minor interface changing
nick
parents: 3973
diff changeset
80 unsigned char INPORT8(unsigned idx)
3973
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
81 {
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
82 return inb(idx);
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
83 }
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
84
3995
0d9de811e312 minor interface changing
nick
parents: 3973
diff changeset
85 unsigned short INPORT16(unsigned idx)
3973
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
86 {
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
87 return inw(idx);
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
88 }
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
89
3995
0d9de811e312 minor interface changing
nick
parents: 3973
diff changeset
90 unsigned INPORT32(unsigned idx)
3973
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
91 {
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
92 return inl(idx);
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
93 }
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
94
3995
0d9de811e312 minor interface changing
nick
parents: 3973
diff changeset
95 void OUTPORT8(unsigned idx,unsigned char val)
3973
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
96 {
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
97 outb(idx,val);
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
98 }
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
99
3995
0d9de811e312 minor interface changing
nick
parents: 3973
diff changeset
100 void OUTPORT16(unsigned idx,unsigned short val)
3973
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
101 {
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
102 outw(idx,val);
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
103 }
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
104
3995
0d9de811e312 minor interface changing
nick
parents: 3973
diff changeset
105 void OUTPORT32(unsigned idx,unsigned val)
3973
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
106 {
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
107 outl(idx,val);
138800dfbe22 preliminary support of direct hardware access
nick
parents:
diff changeset
108 }
4174
4cfb6b9a6da3 api changed: enable/disable_os_io returns error-code (or zero if ok) and pciconfig_read exported for mga_vid
alex
parents: 4164
diff changeset
109