1 | /* $Id: Build.txt 151 2000-05-28 16:50:46Z sandervl $ */
|
---|
2 | SoundBlaster Live! OS/2 Audio driver Build Instructions
|
---|
3 | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
---|
4 | Contents
|
---|
5 | ========
|
---|
6 | 1 Introduction
|
---|
7 | 2 Required tools
|
---|
8 | 3 Recommended tools for debugging
|
---|
9 | 4 Building the driver
|
---|
10 | 5 SBLive driver architecture
|
---|
11 | 6 Difference between the two kinds of 32 bits drivers
|
---|
12 |
|
---|
13 | 1 Introduction
|
---|
14 | ==============
|
---|
15 | This document lists all the needed tools and compilers to build the SB Live
|
---|
16 | OS/2 audio driver.
|
---|
17 | It also tries to give some information about the architecture of the driver
|
---|
18 | and explain some technical details.
|
---|
19 |
|
---|
20 | However, it does not attempt to explain everything. People that are not
|
---|
21 | familiar with either device drivers or MMPM/2 audio drivers should
|
---|
22 | read the PDD & MMPM/2 driver references. Although those two documents
|
---|
23 | are not meant for beginners, they do contain a lot of very useful information.
|
---|
24 |
|
---|
25 | You can always email me (sandervl@xs4all.nl) if you wish to help out with the
|
---|
26 | development of the driver and have some questions.
|
---|
27 | Please make sure you've read at least the pdd & mmpm2 references and try
|
---|
28 | to understand the source code before doing so.
|
---|
29 |
|
---|
30 |
|
---|
31 | 2 Required tools
|
---|
32 | ================
|
---|
33 | - Watcom C/C++ version 11.0b
|
---|
34 | - ALP 4.x (IBM assembler; comes with ddk)
|
---|
35 | - IBM OS/2 DDK (http://service.boulder.ibm.com/ddk/)
|
---|
36 | - Base headers/libraries/tools (combase.zip)
|
---|
37 | - MMPM/2 base (mmpmdd.zip)
|
---|
38 | - PDD & MMPM/2 driver reference
|
---|
39 |
|
---|
40 | 3 Recommended tools for debugging
|
---|
41 | =================================
|
---|
42 | - ICAT debugger (follow link from IBM DDK page)
|
---|
43 | - OS/2 Debug kernel
|
---|
44 |
|
---|
45 |
|
---|
46 | 4 Building the driver
|
---|
47 | =====================
|
---|
48 | You can build the driver from the main directory by executing:
|
---|
49 | WMAKE -f makefile.os2 /ms
|
---|
50 |
|
---|
51 | To build the debug version of the driver (which can be used with ICAT
|
---|
52 | for source-level debugging) run
|
---|
53 | WMAKE -f makefile.os2 DEBUG=1 /ms
|
---|
54 |
|
---|
55 | To build the KEE enhanced version of the driver
|
---|
56 | WMAKE -f makefile.os2 KEE=1 /ms
|
---|
57 |
|
---|
58 |
|
---|
59 | 5 SBLive driver architecture
|
---|
60 | ============================
|
---|
61 | Simplified overview of the flow of control from a multimedia application
|
---|
62 | to the SB Live driver. (for a more complete overview, check the MMPM/2
|
---|
63 | Device Driver Reference; Audio Physical Device Driver Template/PDD architecture)
|
---|
64 |
|
---|
65 | |=============|
|
---|
66 | | |
|
---|
67 | | application |
|
---|
68 | | |
|
---|
69 | |=============|
|
---|
70 | ring 3 | ^
|
---|
71 | --------------------------------------------------------------------------------
|
---|
72 | ring 0 | |
|
---|
73 | v |
|
---|
74 | |=============|
|
---|
75 | | |
|
---|
76 | --->| MMPM/2 |
|
---|
77 | | | |
|
---|
78 | | |=============|
|
---|
79 | | | IOCtls |
|
---|
80 | SHD calls | | |
|
---|
81 | to return | | | IDC
|
---|
82 | buffers | | |
|
---|
83 | | | |
|
---|
84 | | v v
|
---|
85 | | |-------------| OSS cmds |-------------|
|
---|
86 | | | | <---------> | |
|
---|
87 | ----|sblive16.sys | irqs |sblive32.sys |
|
---|
88 | | | ----------> | |
|
---|
89 | |-------------| |-------------|
|
---|
90 | ^ |
|
---|
91 | --------------------------------------------------------------------------------
|
---|
92 | hardware
|
---|
93 | irqs | |
|
---|
94 | | | hardware programming
|
---|
95 | |==============| |
|
---|
96 | | | |
|
---|
97 | | SB Live card |<-----------
|
---|
98 | | |
|
---|
99 | |==============|
|
---|
100 |
|
---|
101 |
|
---|
102 | The drv16 directory contains the sources for the 16 bits driver that handles
|
---|
103 | all MMPM/2 commands and communicates (IDC) with the 32 bits core driver using
|
---|
104 | OSS (Linux audio api) commands.
|
---|
105 | Sblive32.sys contains a small wrapper that interprets the IDC commands and
|
---|
106 | translates them into appriate calls to the original Linux OSS driver (ioctls/
|
---|
107 | open/close/read/write).
|
---|
108 | Basically, the Linux code in sblive32 treats the 16 bits driver as a Linux
|
---|
109 | application trying to use the audio card.
|
---|
110 |
|
---|
111 | During the init complete strategy call of sblive16, it sends the init command
|
---|
112 | to the 32 bits driver. Which ends up calling module_init in the Linux code
|
---|
113 | (sblive\main.c). At this point the Linux code tries to detect the sblive
|
---|
114 | hardware using Linux pci kernel calls.
|
---|
115 | All Linux kernel calls are implemented in sblive32 using OS/2 system calls.
|
---|
116 | (i.e. kmalloc uses DevHlp_VMAlloc)
|
---|
117 |
|
---|
118 | The original Linux SB Live! sources have not changed for the most part.
|
---|
119 | An exception is the acknowledgment that part of a buffer has been played/
|
---|
120 | recorded. (emu10k1_waveout_bh/emu10k1_wavein_bh in sblive\audio.c)
|
---|
121 | OSS32_ProcessIRQ is called from those procedures to tell the 16 bits driver
|
---|
122 | to query the current position and return/queue buffers if needed.
|
---|
123 |
|
---|
124 | The 16 bits driver is more or less a generic MMPM/2 driver that could be used
|
---|
125 | (in theory) to port any OSS Linux audio driver.
|
---|
126 | The wrapper and linux kernel calls implemented in the lib directory can
|
---|
127 | also be reused.
|
---|
128 |
|
---|
129 |
|
---|
130 | 6 Difference between the two kinds of 32 bits drivers
|
---|
131 | =====================================================
|
---|
132 | Warp Server for e-Business (and now Warp 4 too; with fixpack 13) feature
|
---|
133 | a new 32 bits kernel api for physical device driver (well, not entirely true).
|
---|
134 |
|
---|
135 | The 'standard' 32 bits driver (not compiled with KEE=1) is a 32 bits compact
|
---|
136 | memory model driver. (cs=ds, ss!=ds; small code, large data)
|
---|
137 | The stack is still 16 bits and the SS and DS selectors are not identical.
|
---|
138 | Therefor all pointers are far by default. (32 bits far; meaning 16:32, 16
|
---|
139 | bits selector, 32 bits offset)
|
---|
140 |
|
---|
141 | Using this memory model works fine, but is a bit inefficient and not ideal
|
---|
142 | for porting 32 bits code (which may have hidden dependencies on the 32 bits
|
---|
143 | flat memory model; the sblive driver has none).
|
---|
144 | That also explains why the standard 32 bits driver is 18kb larger than the
|
---|
145 | KEE version.
|
---|
146 |
|
---|
147 | The 'enhanced' 32 bits driver uses the KEE interface to create a true 32 bits
|
---|
148 | driver (cs=ds=ss).
|
---|
149 |
|
---|
150 | A small 16 bits part is still needed as our IDC, strategy and irq handlers
|
---|
151 | are expected to be in the 16 bits code segment.
|
---|
152 | An assembly file (drv32\startup.asm) takes care of the thunking that is
|
---|
153 | required.
|
---|
154 |
|
---|
155 |
|
---|