You can subscribe to this list here.
| 2001 |
Jan
|
Feb
(4) |
Mar
(47) |
Apr
(27) |
May
(113) |
Jun
|
Jul
|
Aug
(1) |
Sep
(15) |
Oct
(25) |
Nov
|
Dec
(34) |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 2002 |
Jan
(17) |
Feb
(5) |
Mar
(5) |
Apr
(2) |
May
(16) |
Jun
|
Jul
|
Aug
(15) |
Sep
(28) |
Oct
(78) |
Nov
(39) |
Dec
|
| 2003 |
Jan
|
Feb
|
Mar
|
Apr
|
May
(4) |
Jun
|
Jul
(1) |
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
|
From: M. R. B. <mr...@us...> - 2002-10-29 15:48:50
|
Update of /cvsroot/linuxdc/linux-sh-dc/sound/oss/aica/firmware
In directory usw-pr-cvs1:/tmp/cvs-serv27061
Added Files:
Tag: 1.3
main.c
Log Message:
Moved.
--- NEW FILE: main.c ---
/* Streaming sound driver
*
* (c)2000 Dan Potter
*
* This slightly more complicated version allows for sound effect channels,
* and full sampling rate, panning, and volume control for each. The two
* streaming channels are still always first and always occur at 0x11000 and
* 0x21000. All other sample data can begin at 0x31000. "pos" only works for
* input on the two streaming channels (which will always have the same
* "pos" value).
*
* $Id: main.c,v 1.3 2002/10/29 15:48:47 mrbrown Exp $
*/
#include "aica.h"
#include "aica_cmd_iface.h"
static int buffer_index;
static int active;
/****************** Timer *******************************************/
extern volatile int timer;
void timer_wait(int jiffies) {
int fin = timer + jiffies;
while (timer <= fin)
;
}
/****************** Main Program ************************************/
/* Set channel id at 0x80280d (byte), read position at 0x802814 (long) */
volatile uint32 *cmd = (volatile uint32 *)0x10000;
volatile aica_channel *chans = (volatile aica_channel *)0x10004;
void start_channel(int chn) {
int samplesize = 1;
int stereo = (chans[chn].flags & 1);
if (chans[chn].sfmt == SM_16BIT) samplesize = 2;
if (stereo)
{
aica_play(0, 0x11000 , chans[chn].sfmt, 0, 0x8000/samplesize, chans[chn].freq, chans[chn].vol, 0, 1);
aica_play(1, 0x21000, chans[chn].sfmt, 0, 0x8000/samplesize, chans[chn].freq, chans[chn].vol, 0xff, 1);
}
else
{
aica_play(chn, 0x11000, chans[chn].sfmt, 0, 0x8000/samplesize, chans[chn].freq, chans[chn].vol, chans[chn].pan, 1);
}
}
void stop_channel(int chn) {
if (chn == 0) {
aica_stop(0);
aica_stop(1);
} else {
aica_stop(chn);
}
}
void vol_channel(int chn) {
if (chn == 0) {
aica_vol(0, chans[chn].vol);
aica_vol(1, chans[chn].vol);
} else {
aica_vol(chn, chans[chn].vol);
}
}
void process_cmd(uint32 cmd) {
/* cmd is channel to look at +1 */
cmd--;
switch(chans[cmd].cmd) {
case AICA_CMD_NONE:
break;
case AICA_CMD_START:
start_channel(cmd);
active = 0;
break;
case AICA_CMD_STOP:
stop_channel(cmd);
active = 0;
break;
case AICA_CMD_VOL:
vol_channel(cmd);
break;
}
}
int arm_main() {
int cmdl;
int flags, shift_buffer, pass;
/* Initialize the AICA part of the SPU */
aica_init();
/* Observe channel 0 */
SNDREG8(0x280d) = 0;
/* Wait for a command */
while(1) {
/* Check for a command */
cmdl = *cmd;
if (cmdl & AICA_CMD_KICK) {
*cmd = 0;
process_cmd(cmdl & ~AICA_CMD_KICK);
}
/* Update position counters */
chans[0].pos = SNDREG32(0x2814);
/* Little delay to prevent memory lock */
timer_wait(10);
}
}
|
|
From: M. R. B. <mr...@us...> - 2002-10-29 15:45:52
|
Update of /cvsroot/linuxdc/linux-sh-dc/sound/oss/aica/firmware
In directory usw-pr-cvs1:/tmp/cvs-serv25255
Added Files:
Tag: 1.3
crt0.s
Log Message:
Moved.
--- NEW FILE: crt0.s ---
# Adapted from Marcus' AICA example among a few other sources =)
#
# $Id: crt0.s,v 1.3 2002/10/29 15:45:49 mrbrown Exp $
.text
.globl arm_main
.globl timer
.globl jps
# Exception vectors
b start
b undef
b softint
b pref_abort
b data_abort
b rsrvd
b irq
# FIQ code adapted from the Marcus AICA example
fiq:
# Save regs
#stmdb sp!, {r0-r14}
# Grab interrupt type (store as parameter)
ldr r8,intreq
ldr r9,[r8]
and r9,r9,#7
cmp r9,#2
bne fiq_done
# Type 2 is timer interrupt. Increment timer variable.
adr r8,timer
ldr r9,[r8]
add r9,r9,#1
str r9,[r8]
# Request a new timer interrupt. We'll calculate the number
# put in here based on the "jps" (jiffies per second).
ldr r8, timer_control
mov r9,#256-(44100/4410)
# ldr r9,jps
str r9,[r8,#0x10]
mov r9,#0x40
str r9,[r8,#0x24]
b fiq_done
# Return from interrupt
fiq_done:
# Clear interrupt
ldr r8,intclr
mov r9,#1
str r9,[r8]
str r9,[r8]
str r9,[r8]
str r9,[r8]
# Restore regs and return
#ldmdb sp!, {r0-r14}
subs pc,r14,#4
intreq:
.long 0x00802d00
intclr:
.long 0x00802d04
timer_control:
.long 0x00802880
timer:
.long 0
jps:
.long 256-(44100/1000)
start:
# Setup a basic stack, disable IRQ, enable FIQ
mov sp,#0xb000
mrs r10,CPSR
orr r10,r10,#0x80
bic r10,r10,#0x40
msr CPSR_all,r10
# Call the main for the SPU
bl arm_main
# Loop infinitely if we get here
here: b here
# Handlers we don't bother to catch
undef:
softint:
mov pc,r14
pref_abort:
data_abort:
irq:
rsrvd:
sub pc,r14,#4
|
|
From: M. R. B. <mr...@us...> - 2002-10-29 15:45:36
|
Update of /cvsroot/linuxdc/linux-sh-dc/sound/oss/aica/firmware
In directory usw-pr-cvs1:/tmp/cvs-serv25099
Added Files:
Tag: 1.3
bin2hex.pl
Log Message:
Moved.
--- NEW FILE: bin2hex.pl ---
#
# bin2hex.pl by Chami.com
# http://www.chami.com/tips/
#
# $Id: bin2hex.pl,v 1.3 2002/10/29 15:45:34 mrbrown Exp $
# number of characters per line
$chars_per_line = 15;
# -------------------------------------
# language id
#
# 0 = Perl (default)
# 1 = C / C++
# 2 = Pascal / Delphi
#
$lang = $ARGV[1];
$rem_begin = "begin binary data:";
$rem_end = "end binary data.";
# initialize for Perl strings
# by default
$_var = "# $rem_begin\n".
"\$bin_data = # %d\n";
$_begin = "\"";
$_end = "\";\n";
$_break = "\".\n\"";
$_format = "\\x%02X";
$_separator = "";
$_comment = "# $rem_end ".
"size = %d bytes";
# C / C++
if(1 == $lang)
{
$_var = "/* $rem_begin */\n".
"char bin_arm7[] = ".
"/* %d */\n";
$_begin = "{";
$_end = "};\n";
$_break = "\n";
$_format = "0x%02X";
$_separator = ",";
$_comment = "/* $rem_end ".
"size = %d bytes */";
}
elsif(2 == $lang)
{
$_var = "{ $rem_begin }\n".
"const bin_data : ".
"array [1..%d] of ".
"byte = \n";
$_begin = "(";
$_end = ");\n";
$_break = "\n";
$_format = "\$%02X";
$_separator = ",";
$_comment = "{ $rem_end ".
"size = %d bytes }";
}
if(open(F, "<".$ARGV[0]))
{
binmode(F);
$s = '';
$i = 0;
$count = 0;
$first = 1;
$s .= $_begin;
while(!eof(F))
{
if($i >= $chars_per_line)
{
$s .= $_break;
$i = 0;
}
if(!$first)
{
$s .= $_separator;
}
$s .= sprintf(
$_format, ord(getc(F)));
++$i;
++$count;
$first = 0;
}
$s .= $_end;
$s .= sprintf $_comment, $count;
$s .= "\n\n";
$s = "\n".sprintf($_var, $count).$s;
print $s;
close( F );
}
else
{
print
"bin2hex.pl by Chami.com\n".
"\n".
"usage:\n".
" perl bin2hex.pl ".
" \n".
"\n".
" : path to the ".
"binary file\n".
" : 0 = Perl, ".
"1 = C/C++/Java, ".
"2 = Pascal/Delphi\n".
"\n";
}
|
|
From: M. R. B. <mr...@us...> - 2002-10-29 15:45:13
|
Update of /cvsroot/linuxdc/linux-sh-dc/sound/oss/aica/firmware
In directory usw-pr-cvs1:/tmp/cvs-serv24884
Modified Files:
Tag: 1
aica_cmd_iface.h
Log Message:
Remove spurious $ keyword
Index: aica_cmd_iface.h
===================================================================
RCS file: /cvsroot/linuxdc/linux-sh-dc/sound/oss/aica/firmware/aica_cmd_iface.h,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -d -r1.1 -r1.2
--- aica_cmd_iface.h 29 Oct 2002 15:44:14 -0000 1.1
+++ aica_cmd_iface.h 29 Oct 2002 15:45:10 -0000 1.2
@@ -3,8 +3,6 @@
#ifndef __ARM_AICA_CMD_IFACE_H
#define __ARM_AICA_CMD_IFACE_H
-/* $Id$ */
-
#ifndef __ARCH_TYPES_H
typedef unsigned long uint32;
#endif
|
|
From: M. R. B. <mr...@us...> - 2002-10-29 15:44:16
|
Update of /cvsroot/linuxdc/linux-sh-dc/sound/oss/aica/firmware
In directory usw-pr-cvs1:/tmp/cvs-serv24145
Added Files:
Tag: 1
aica_cmd_iface.h
Log Message:
Moved.
--- NEW FILE: aica_cmd_iface.h ---
/* $Id: aica_cmd_iface.h,v 1.1 2002/10/29 15:44:14 mrbrown Exp $ */
#ifndef __ARM_AICA_CMD_IFACE_H
#define __ARM_AICA_CMD_IFACE_H
/* $Id: aica_cmd_iface.h,v 1.1 2002/10/29 15:44:14 mrbrown Exp $ */
#ifndef __ARCH_TYPES_H
typedef unsigned long uint32;
#endif
/* Make this 8 dwords long for one aica bus queue */
typedef struct {
uint32 cmd; /* Command ID */
uint32 pos; /* Sample position */
uint32 length; /* Sample length */
uint32 freq; /* Frequency */
uint32 vol; /* Volume 0-255 */
uint32 pan; /* Pan 0-255 */
uint32 sfmt; /* Sound format */
uint32 flags; /* flags */
} aica_channel;
/* Command values */
#define AICA_CMD_KICK 0x80000000
#define AICA_CMD_NONE 0
#define AICA_CMD_START 1
#define AICA_CMD_STOP 2
#define AICA_CMD_VOL 3
#endif /* __ARM_AICA_CMD_IFACE_H */
|
|
From: M. R. B. <mr...@us...> - 2002-10-29 15:43:54
|
Update of /cvsroot/linuxdc/linux-sh-dc/sound/oss/aica/firmware
In directory usw-pr-cvs1:/tmp/cvs-serv23680
Added Files:
Tag: 1.3
aica.h
Log Message:
Moved.
--- NEW FILE: aica.h ---
/* $Id: aica.h,v 1.3 2002/10/29 15:43:51 mrbrown Exp $ */
#ifndef __AICA_H
#define __AICA_H
/* volatile unsigned char *dc_snd_base = (unsigned char *)0x00800000; */
#define dc_snd_base ((volatile unsigned char *)0x00800000)
/* Some convienence macros */
#define SNDREG32A(x) ((volatile unsigned long *)(dc_snd_base + (x)))
#define SNDREG32(x) (*SNDREG32A(x))
#define SNDREG8A(x) (dc_snd_base + (x))
#define SNDREG8(x) (*SNDREG8A(x))
#define CHNREG32A(chn, x) SNDREG32A(0x80*(chn) + (x))
#define CHNREG32(chn, x) (*CHNREG32A(chn, x))
#define CHNREG8A(chn, x) SNDREG8A(0x80*(chn) + (x))
#define CHNREG8(chn, x) (*CHNREG8A(chn, x))
/* Sound modes */
#define SM_8BIT 1
#define SM_16BIT 0
#define SM_ADPCM 2
#endif /* __AICA_H */
|
|
From: M. R. B. <mr...@us...> - 2002-10-29 15:43:41
|
Update of /cvsroot/linuxdc/linux-sh-dc/sound/oss/aica/firmware
In directory usw-pr-cvs1:/tmp/cvs-serv23408
Added Files:
Tag: 1.3
aica.c
Log Message:
Moved.
--- NEW FILE: aica.c ---
/* This file is part of the Dreamcast function library.
* Please see libdream.c for further details.
*
* (c)2000 Dan Potter
*
* $Id: aica.c,v 1.3 2002/10/29 15:43:38 mrbrown Exp $
*/
#include "aica.h"
void aica_init() {
int i, j;
/* Initialize AICA channels */
SNDREG32(0x2800) = 0x0000;
for (i=0; i<64; i++) {
for (j=0; j<0x80; j+=4)
CHNREG32(i, j) = 0;
CHNREG32(i,0) = 0x8000;
CHNREG32(i,20) = 0x1f;
}
SNDREG32(0x2800) = 0x000f;
}
/* Translates a volume from linear form to logarithmic form (required by
the AICA chip */
/* int logs[] = {
0, 40, 50, 58, 63, 68, 73, 77, 80, 83, 86, 89, 92, 94, 97, 99, 101, 103,
105, 107, 109, 111, 112, 114, 116, 117, 119, 120, 122, 123, 125, 126, 127,
129, 130, 131, 133, 134, 135, 136, 137, 139, 140, 141, 142, 143, 144, 145,
146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 156, 157, 158, 159,
160, 161, 162, 162, 163, 164, 165, 166, 166, 167, 168, 169, 170, 170, 171,
172, 172, 173, 174, 175, 175, 176, 177, 177, 178, 179, 180, 180, 181, 182,
182, 183, 183, 184, 185, 185, 186, 187, 187, 188, 188, 189, 190, 190, 191,
191, 192, 193, 193, 194, 194, 195, 196, 196, 197, 197, 198, 198, 199, 199,
200, 201, 201, 202, 202, 203, 203, 204, 204, 205, 205, 206, 206, 207, 207,
208, 208, 209, 209, 210, 210, 211, 211, 212, 212, 213, 213, 214, 214, 215,
215, 216, 216, 217, 217, 217, 218, 218, 219, 219, 220, 220, 221, 221, 222,
222, 222, 223, 223, 224, 224, 225, 225, 225, 226, 226, 227, 227, 228, 228,
228, 229, 229, 230, 230, 230, 231, 231, 232, 232, 232, 233, 233, 234, 234,
234, 235, 235, 236, 236, 236, 237, 237, 238, 238, 238, 239, 239, 240, 240,
240, 241, 241, 241, 242, 242, 243, 243, 243, 244, 244, 244, 245, 245, 245,
246, 246, 247, 247, 247, 248, 248, 248, 249, 249, 249, 250, 250, 250, 251,
251, 251, 252, 252, 252, 253, 253, 253, 254, 254, 254, 255
}; */
int logs[] = {
0, 15, 22, 27, 31, 35, 39, 42, 45, 47, 50, 52, 55, 57, 59, 61,
63, 65, 67, 69, 71, 73, 74, 76, 78, 79, 81, 82, 84, 85, 87, 88,
90, 91, 92, 94, 95, 96, 98, 99, 100, 102, 103, 104, 105, 106,
108, 109, 110, 111, 112, 113, 114, 116, 117, 118, 119, 120, 121,
122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134,
135, 136, 137, 138, 138, 139, 140, 141, 142, 143, 144, 145, 146,
146, 147, 148, 149, 150, 151, 152, 152, 153, 154, 155, 156, 156,
157, 158, 159, 160, 160, 161, 162, 163, 164, 164, 165, 166, 167,
167, 168, 169, 170, 170, 171, 172, 173, 173, 174, 175, 176, 176,
177, 178, 178, 179, 180, 181, 181, 182, 183, 183, 184, 185, 185,
186, 187, 187, 188, 189, 189, 190, 191, 191, 192, 193, 193, 194,
195, 195, 196, 197, 197, 198, 199, 199, 200, 200, 201, 202, 202,
203, 204, 204, 205, 205, 206, 207, 207, 208, 209, 209, 210, 210,
211, 212, 212, 213, 213, 214, 215, 215, 216, 216, 217, 217, 218,
219, 219, 220, 220, 221, 221, 222, 223, 223, 224, 224, 225, 225,
226, 227, 227, 228, 228, 229, 229, 230, 230, 231, 232, 232, 233,
233, 234, 234, 235, 235, 236, 236, 237, 237, 238, 239, 239, 240,
240, 241, 241, 242, 242, 243, 243, 244, 244, 245, 245, 246, 246,
247, 247, 248, 248, 249, 249, 250, 250, 251, 251, 252, 252, 253, 254, 255
};
int vol_to_log(int vol) {
/* vol = 0xff - (vol & 0xff); */
/* vol = 0xff - logs[vol & 0xff]; */
/* vol = 128 - ((vol & 0xff) / 2); */
vol = 0xff - logs[128 + ((vol & 0xff) / 2)];
return vol;
}
/* Sets up a sound channel completely. This is generally good if you want
a quick and dirty way to play notes. If you want a more comprehensive
set of routines (more like PC wavetable cards) see below.
ch is the channel to play on (0 - 63)
smpptr is the pointer to the sound data; if you're running off the
SH4, then this ought to be (ptr - 0xa0800000); otherwise it's just
ptr. Basically, it's an offset into sound ram.
mode is one of the mode constants (16 bit, 8 bit, ADPCM)
nsamp is the number of samples to play (not number of bytes!)
freq is the sampling rate of the sound
vol is the volume, 0 to 0xff (0xff is louder)
pan is a panning constant -- 0 is left, 128 is center, 255 is right.
This routine (and the similar ones) owe a lot to Marcus' sound example --
I hadn't gotten quite this far into dissecting the individual regs yet. */
void aica_play(int ch, unsigned long smpptr, int mode, int loopst, int loopend,
int freq, int vol, int pan, int loopflag) {
unsigned long freq_lo, freq_base = 5644800;
int freq_hi = 7;
int i, j;
/* Stop the channel (if it's already playing) */
/*for (i=CHNREG8(ch, 41); i<=0xff; i++) {
CHNREG8(ch, 41) = i;
} */
aica_stop(ch);
for (i=0; i<256; i++) {
asm("nop");
asm("nop");
asm("nop");
asm("nop");
}
/* Convert the incoming volume and pan into hardware values */
vol = vol_to_log(vol);
/* For the moment this is going to have to suffice, until we really
figure out what these mean. */
if (pan == 0x80)
pan = 0;
else if (pan < 0x80)
pan = 0x1f;
else
pan = 0xf;
/* Envelope setup. The first of these is the loop point,
e.g., where the sample starts over when it loops. The second
is the loop end. This is the full length of the sample when
you are not looping, or the loop end point when you are (though
storing more than that is a waste of memory if you're not doing
volume enveloping). */
CHNREG32(ch, 8) = loopst & 0xffff;
CHNREG32(ch, 12) = loopend & 0xffff;
/* Need to convert frequency to floating point format
(freq_hi is exponent, freq_lo is mantissa)
Formula is ferq = 44100*2^freq_hi*(1+freq_lo/1024) */
while (freq < freq_base && freq_hi > -8) {
freq_base >>= 1;
--freq_hi;
}
freq_lo = (freq<<10) / freq_base;
/* Write resulting values */
CHNREG32(ch, 24) = (freq_hi << 11) | (freq_lo & 1023);
/* Set volume, pan, and some other things that we don't know what
they do =) */
CHNREG8(ch, 36) = pan;
CHNREG8(ch, 37) = 0xf;
CHNREG8(ch, 40) = 0x24;
CHNREG8(ch, 41) = vol; /* Vol starts at zero so we can ramp */
/* If we supported volume envelopes (which we don't yet) then
this value would set that up. The top 4 bits determine the
envelope speed. f is the fastest, 1 is the slowest, and 0
seems to be an invalid value and does weird things). The
default (below) sets it into normal mode (play and terminate/loop).
CHNREG32(ch, 16) = 0xf010;
*/
CHNREG32(ch, 16) = 0x1f; /* No volume envelope */
/* Set sample format, buffer address, and looping control. If
0x0200 mask is set on reg 0, the sample loops infinitely. If
it's not set, the sample plays once and terminates. We'll
also set the bits to start playback here. */
CHNREG32(ch, 4) = smpptr & 0xffff;
if (loopflag)
CHNREG32(ch, 0) = 0xc000 | 0x0200 | (mode<<7) | (smpptr >> 16); /* Loops */
else
CHNREG32(ch, 0) = 0xc000 | 0x0000 | (mode<<7) | (smpptr >> 16); /* No loop */
/* Enable playback */
/* CHNREG32(ch, 0) |= 0xc000; */
/*for (i=0xff; i>=vol; i--)
CHNREG8(ch, 41) = i; */
}
/* Stop the sound on a given channel */
void aica_stop(int ch) {
CHNREG32(ch, 0) = (CHNREG32(ch, 0) & ~0x4000) | 0x8000;
}
/* The rest of these routines can change the channel in mid-stride so you
can do things like vibrato and panning effects. */
/* Set channel volume */
void aica_vol(int ch, int vol) {
vol = vol_to_log(vol);
CHNREG8(ch, 41) = vol;
}
/* Set channel pan */
void aica_pan(int ch, int pan) {
if (pan == 0x80)
pan = 0;
else if (pan < 0x80)
pan = 0x1f;
else
pan = 0xf;
CHNREG8(ch, 36) = pan;
}
/* Set channel frequency */
void aica_freq(int ch, int freq) {
unsigned long freq_lo, freq_base = 5644800;
int freq_hi = 7;
while (freq < freq_base && freq_hi > -8) {
freq_base >>= 1;
freq_hi--;
}
freq_lo = (freq<<10) / freq_base;
CHNREG32(ch, 24) = (freq_hi << 11) | (freq_lo & 1023);
}
|
|
From: M. R. B. <mr...@us...> - 2002-10-29 15:43:21
|
Update of /cvsroot/linuxdc/linux-sh-dc/sound/oss/aica/firmware
In directory usw-pr-cvs1:/tmp/cvs-serv23013
Added Files:
Tag: 1.3
Makefile
Log Message:
Moved.
--- NEW FILE: Makefile ---
# $Id: Makefile,v 1.3 2002/10/29 15:43:18 mrbrown Exp $
#define cross compiler location etc
CROSS_COMPILE=arm-elf-
#change the next variable to fit your set up!
PATH_TO_X=/home/Adrian/ARM/build/H-i686-pc-linux-gnu/bin/
DC_ARM7AS = $(PATH_TO_X)$(CROSS_COMPILE)as
DC_ARM7LD = $(PATH_TO_X)$(CROSS_COMPILE)ld
DC_ARM7CC = $(PATH_TO_X)$(CROSS_COMPILE)gcc
DC_ARM7CPP = $(PATH_TO_X)$(CC) -E
DC_ARM7AR = $(PATH_TO_X)$(CROSS_COMPILE)ar
DC_ARM7NM = $(PATH_TO_X)$(CROSS_COMPILE)nm
DC_ARM7STRIP = $(PATH_TO_X)$(CROSS_COMPILE)strip
DC_ARM7OBJCOPY = $(PATH_TO_X)$(CROSS_COMPILE)objcopy
DC_ARM7OBJDUMP = $(PATH_TO_X)$(CROSS_COMPILE)objdump
all: stream.drv
#aica_fw.h: stream.drv
# ../../../utils/bin2c/bin2c stream.drv aica_fw.h.tmp
# echo 'unsigned char aica_fw[] = {' > aica_fw.h
# cat aica_fw.h.tmp >> aica_fw.h
# echo '};' >> aica_fw.h
# -rm aica_fw.h.tmp
stream.drv: prog.elf
$(DC_ARM7OBJCOPY) -O binary prog.elf stream.drv
prog.elf: crt0.o main.o aica.o
$(DC_ARM7CC) -Wl,-Ttext,0x00000000 -nostartfiles -nostdlib -e reset -o prog.elf crt0.o main.o aica.o -lgcc
%.o: %.c
$(DC_ARM7CC) -O2 $(DC_ARM7INCS) -c $< -o $@
%.o: %.s
$(DC_ARM7AS) $< -o $@
clean:
-rm -f *.o *.srec *.elf 1ST_READ.BIN prog.bin *.bck
|
|
From: M. R. B. <mr...@us...> - 2002-10-29 15:42:42
|
Update of /cvsroot/linuxdc/linux-sh-dc/drivers/sound/aica/firmware In directory usw-pr-cvs1:/tmp/cvs-serv22293 Modified Files: Makefile aica.c aica.h aica_cmd_iface.h bin2hex.pl crt0.s main.c Log Message: Added $ keywords to all source files Index: Makefile =================================================================== RCS file: /cvsroot/linuxdc/linux-sh-dc/drivers/sound/aica/firmware/Makefile,v retrieving revision 1.1 retrieving revision 1.2 diff -u -d -r1.1 -r1.2 --- Makefile 9 Jan 2002 11:13:57 -0000 1.1 +++ Makefile 29 Oct 2002 15:42:39 -0000 1.2 @@ -1,4 +1,4 @@ - +# $Id$ #define cross compiler location etc CROSS_COMPILE=arm-elf- Index: aica.c =================================================================== RCS file: /cvsroot/linuxdc/linux-sh-dc/drivers/sound/aica/firmware/aica.c,v retrieving revision 1.1 retrieving revision 1.2 diff -u -d -r1.1 -r1.2 --- aica.c 9 Jan 2002 11:13:57 -0000 1.1 +++ aica.c 29 Oct 2002 15:42:39 -0000 1.2 @@ -2,6 +2,8 @@ * Please see libdream.c for further details. * * (c)2000 Dan Potter + * + * $Id$ */ #include "aica.h" Index: aica.h =================================================================== RCS file: /cvsroot/linuxdc/linux-sh-dc/drivers/sound/aica/firmware/aica.h,v retrieving revision 1.1 retrieving revision 1.2 diff -u -d -r1.1 -r1.2 --- aica.h 9 Jan 2002 11:13:57 -0000 1.1 +++ aica.h 29 Oct 2002 15:42:39 -0000 1.2 @@ -1,3 +1,5 @@ +/* $Id$ */ + #ifndef __AICA_H #define __AICA_H Index: aica_cmd_iface.h =================================================================== RCS file: /cvsroot/linuxdc/linux-sh-dc/drivers/sound/aica/firmware/aica_cmd_iface.h,v retrieving revision 1.1 retrieving revision 1.2 diff -u -d -r1.1 -r1.2 --- aica_cmd_iface.h 9 Jan 2002 11:13:57 -0000 1.1 +++ aica_cmd_iface.h 29 Oct 2002 15:42:39 -0000 1.2 @@ -1,3 +1,5 @@ +/* $Id$ */ + #ifndef __ARM_AICA_CMD_IFACE_H #define __ARM_AICA_CMD_IFACE_H Index: bin2hex.pl =================================================================== RCS file: /cvsroot/linuxdc/linux-sh-dc/drivers/sound/aica/firmware/bin2hex.pl,v retrieving revision 1.1 retrieving revision 1.2 diff -u -d -r1.1 -r1.2 --- bin2hex.pl 9 Jan 2002 11:13:57 -0000 1.1 +++ bin2hex.pl 29 Oct 2002 15:42:39 -0000 1.2 @@ -2,6 +2,7 @@ # bin2hex.pl by Chami.com # http://www.chami.com/tips/ # +# $Id$ # number of characters per line $chars_per_line = 15; Index: crt0.s =================================================================== RCS file: /cvsroot/linuxdc/linux-sh-dc/drivers/sound/aica/firmware/crt0.s,v retrieving revision 1.1 retrieving revision 1.2 diff -u -d -r1.1 -r1.2 --- crt0.s 9 Jan 2002 11:13:57 -0000 1.1 +++ crt0.s 29 Oct 2002 15:42:39 -0000 1.2 @@ -1,4 +1,6 @@ # Adapted from Marcus' AICA example among a few other sources =) +# +# $Id$ .text .globl arm_main Index: main.c =================================================================== RCS file: /cvsroot/linuxdc/linux-sh-dc/drivers/sound/aica/firmware/main.c,v retrieving revision 1.1 retrieving revision 1.2 diff -u -d -r1.1 -r1.2 --- main.c 9 Jan 2002 11:13:57 -0000 1.1 +++ main.c 29 Oct 2002 15:42:39 -0000 1.2 @@ -9,6 +9,7 @@ * input on the two streaming channels (which will always have the same * "pos" value). * + * $Id$ */ #include "aica.h" |
|
From: M. R. B. <mr...@us...> - 2002-10-29 15:40:18
|
Update of /cvsroot/linuxdc/linux-sh-dc/sound/oss/aica/firmware In directory usw-pr-cvs1:/tmp/cvs-serv20743/firmware Log Message: Directory /cvsroot/linuxdc/linux-sh-dc/sound/oss/aica/firmware added to the repository |
|
From: M. R. B. <mr...@us...> - 2002-10-29 15:39:12
|
Update of /cvsroot/linuxdc/linux-sh-dc/sound/oss/aica
In directory usw-pr-cvs1:/tmp/cvs-serv20099
Added Files:
Tag: 1.9
main.c
Log Message:
Moved.
--- NEW FILE: main.c ---
/*=======================================================
== OSS compliant sound driver for Dreamcast Linux ==
== New coding is ==
== Copyright (C) Adrian McMenamin 2001, 2002 ==
== ad...@mc... ==
== ==
== Substantially based on Dan Potter's Kallistios code ==
== Copyright Dan Potter and others, 2000, 2001 ==
== ==
== ==
== Licencsed under FSF's General Public Licence v2 ==
== http://www.gnu.org ==
== Absolutely no warranty is offered ==
=========================================================
==
==
== This drives the SH4 end of the sound driver
=========================================================
=======================================================
$Id: main.c,v 1.9 2002/10/29 15:39:09 mrbrown Exp $
*/
#include <linux/init.h>
#include <linux/config.h>
#include <linux/module.h>
#include <linux/types.h>
#include <linux/kernel.h>
#include <linux/kmod.h>
#include <linux/mm.h>
#include <linux/wait.h>
#include <linux/sched.h>
#include <linux/ioport.h>
#include <linux/errno.h>
#include <linux/ioctl.h>
#include <asm/semaphore.h>
#include <asm/dc_sysasic.h>
#include "../sound_config.h"
#include "arm7.h"
/* Command values */
#define AICA_CMD_KICK 0x80000000
#define AICA_CMD_NONE 0
#define AICA_CMD_START 1
#define AICA_CMD_STOP 2
#define AICA_CMD_VOL 3
/* Sound modes */
#define SM_8BIT 1
#define SM_16BIT 0
#define SM_ADPCM 2
#ifdef _BUILD_DEBUG_
#define DEBGM(fmt, args...) (printk(KERN_ERR fmt, ##args))
#else
#define DEBGM(fmt, args...) ((void) 0)
#endif
static char *BUFFER;
static char *BUFFER2;
static char *BUFFERL;
static char *BUFFERR;
static int buffer_size = 0x2000;
static int total_count;
static int samplelength;
static int stereo;
static int left_volume = 0xa0;
static int right_volume = 0xa0;
static int currentpoint;
static struct semaphore dsp_mutex;
static int sleeps = 0; /* default is not to sleep for hi-sample rate sounds */
MODULE_PARM(sleeps, "i");
typedef struct {
uint32_t cmd; /* Command ID */
uint32_t pos; /* Sample position */
uint32_t length; /* Sample length */
uint32_t freq; /* Frequency */
uint32_t vol; /* Volume 0-255 */
uint32_t pan; /* Pan 0-255 */
uint32_t sfmt; /* Sound format */
uint32_t flags; /* Bit flags */
} aica_channel;
/* Flags
* 15 }
* 14 }
* 13 }
* 12 } Right channel volume
* 11 } in stereo
* 10 }
* 9 }
* 8 }
* 7
* 6
* 5
* 4
* 3
* 2 } Current active
* 1 } buffer
* 0 ->Stereo when set
*/
aica_channel *chanh;
void *convert_u8tos8(void *buffer, int count)
{
int i;
char *curpos = (char *) buffer;
for (i = 0; i < count; i++) {
char x = *curpos;
x ^= 0x80;
*curpos++ = x;
}
return buffer;
}
/* Waits for the sound FIFO to empty */
inline void spu_write_wait()
{
while (1) {
if (!(readl(0xa05f688c) & 0x11))
break;
}
}
void spu_memload(uint32_t toi, uint8_t * from, int length)
{
uint32_t *froml = (uint32_t *) from;
uint32_t *to = (uint32_t *) (0xa0800000 + toi);
int i, val;
if (length % 4)
length = (length / 4) + 1;
else
length = length / 4;
for (i = 0; i < length; i++) {
val = *froml;
writel(val, to);
froml++;
to++;
if (i && !(i % 8))
spu_write_wait();
}
}
void spu_memset(uint32_t toi, unsigned long what, int length)
{
uint32_t *to = (uint32_t *) (0xa0800000 + toi);
int i;
if (length % 4)
length = (length / 4) + 1;
else
length = length / 4;
for (i = 0; i < length; i++) {
writel(what, to);
to++;
if (i && !(i % 8))
spu_write_wait();
}
}
/* Enable/disable the SPU; note that disable implies reset of the
ARM CPU core. */
void spu_enable()
{
uint32_t regval = readl(0xa0702c00);
regval &= ~1;
spu_write_wait();
writel(regval, 0xa0702c00);
}
/* Stop the ARM7 processor and clear registers
for all channels */
void spu_disable()
{
int i;
spu_write_wait();
uint32_t regval = readl(0xa0702c00);
regval |= 1;
spu_write_wait();
writel(regval, 0xa0702c00);
for (i = 0; i < 64; i++) {
spu_write_wait();
regval = readl(0xa0700000 + (i * 0x80));
regval = (regval & ~0x4000) | 0x8000;
spu_write_wait();
writel(regval, 0xa0700000 + (i * 0x80));
}
}
/* Halt the sound processor,
clear the memory,
load some default ARM7 code,
and then restart ARM7
*/
int spu_init()
{
spu_disable();
spu_memset(0, 0, 0x200000 / 4);
*(uint32_t *) 0xa0800000 = 0xea000002;
spu_enable();
schedule();
return 0;
}
/* Shutdown SPU */
int spu_shutdown()
{
spu_disable();
spu_memset(0, 0, 0x200000 / 4);
return 0;
}
inline static void chn_halt()
{
spu_write_wait();
writel(AICA_CMD_KICK | AICA_CMD_STOP, (uint32_t *) 0xa0810000);
}
inline static void chn_start()
{
spu_write_wait();
writel(AICA_CMD_KICK | AICA_CMD_START, (uint32_t *) 0xa0810000);
}
typedef struct aica_dev {
struct aica_dev *next_dev;
int channel; /* which one are we using here? */
int audio_minor; /* device number */
int mixer_minor; /* device number */
wait_queue_head_t open_wait; /* wait queue */
int last_write_length; /* length of data last written to device */
int sformat; /* format of data being written */
} aica_dev_t;
/* List of all open devices */
static aica_dev_t *aica_dev_list;
/* open the device file, locking AICA registers as we go */
static int aica_audio_open(struct inode *inode, struct file *file)
{
aica_dev_t *devc;
dev_t minor = MINOR(inode->i_rdev);
MOD_INC_USE_COUNT;
devc = aica_dev_list;
if (down_interruptible(&dsp_mutex))
return -ERESTARTSYS;
request_mem_region(0xa0700000, 0x100, "AICA Channels");
chanh = kmalloc(sizeof(aica_channel), GFP_KERNEL);
if (chanh == NULL)
return -ENOMEM;
chanh->flags = 0;
if ((minor & 0xF) == SND_DEV_DSP) {
chanh->sfmt = SM_8BIT;
devc->sformat = AFMT_U8;
} else if ((minor & 0xF) == SND_DEV_DSP16) {
chanh->sfmt = SM_16BIT;
devc->sformat = AFMT_S16_LE;
} else {
DEBGM("Attempting to open an unsupported device file\n");
release_mem_region(0xa0700000, 0x100);
up(&dsp_mutex);
MOD_DEC_USE_COUNT;
return -EINVAL;
}
devc->last_write_length = 0;
file->private_data = devc;
spu_disable();
spu_memset(0, 0, 0x31000);
spu_memload(0, bin_arm7, sizeof(bin_arm7));
spu_enable();
/* Load default channel values */
chanh->cmd = AICA_CMD_START;
chanh->vol = left_volume;
chanh->pan = 0x80;
chanh->pos = 0;
chanh->freq = 8000;
total_count = 0;
currentpoint = 0;
return 0;
}
/* Release device, waiting for queued audio to play out */
static int aica_audio_release(struct inode *inode, struct file *file)
{
aica_dev_t *devc = (aica_dev_t *) (file->private_data);
int playpoint, i;
if (chanh->freq < 23000) {
interruptible_sleep_on_timeout(&(devc->open_wait), HZ / 5);
}
if (devc->last_write_length > 0) {
spu_write_wait();
playpoint = readl(0xa0810004 + 4);
if ((playpoint * samplelength) > currentpoint) {
for (i = 0; i < (HZ * 2); i++) {
interruptible_sleep_on_timeout(&
(devc->
open_wait),
1);
spu_write_wait();
playpoint = readl(0xa0810004 + 4);
if ((playpoint * samplelength) <
currentpoint)
break;
}
}
for (i = 0; i < (HZ * 2); i++) {
if ((chanh->freq < 23000) || (sleeps > 0))
interruptible_sleep_on_timeout(&
(devc->
open_wait),
1);
spu_write_wait();
playpoint = readl(0xa0810004 + 4);
if ((playpoint * samplelength) > currentpoint)
break;
}
}
spu_disable();
if (BUFFER)
kfree(BUFFER);
if (BUFFER2)
kfree(BUFFER2);
if (BUFFERL)
kfree(BUFFERL);
if (BUFFERR)
kfree(BUFFERR);
BUFFER = NULL;
BUFFER2 = NULL;
BUFFERL = NULL;
BUFFERR = NULL;
kfree(chanh);
release_mem_region(0xa0700000, 0x100);
MOD_DEC_USE_COUNT;
total_count = 0;
up(&dsp_mutex);
return 0;
}
/* Perform stereo seperation for 16- and 8-bit samples */
static int aica_audio_process_stereo(int *count_out, int *count)
{
int z, y, x, w;
*count_out = *count / 2;
y = *count_out;
BUFFER2 = kmalloc(y, GFP_KERNEL);
if (BUFFER2 == NULL)
return -1;
char *BUFFER3 = kmalloc(y, GFP_KERNEL);
if (BUFFER3 == NULL)
return -1;
if (samplelength == 1) {
for (z = 0; z < y; z++) {
x = z * 2;
BUFFER3[z] = BUFFER[x];
BUFFER2[z] = BUFFER[x + 1];
}
} else {
y = y / samplelength;
for (z = 0; z < y; z++) {
x = z * 2;
w = z * 4;
BUFFER3[x] = BUFFER[w];
BUFFER3[x + 1] = BUFFER[w + 1];
BUFFER2[x] = BUFFER[w + 2];
BUFFER2[x + 1] = BUFFER[w + 3];
}
}
kfree(BUFFER);
BUFFER = BUFFER3;
return 0;
}
/* Block if buffer full until playing has freed
up necessary space. Sleep while waiting for
low sample freq samples to play, but lock
processor for demanding samples */
inline static int aica_audio_tidy_buffers(aica_dev_t * devc)
{
int playpoint;
do {
if (chanh->freq < 23000)
interruptible_sleep_on_timeout(&(devc->open_wait),
1);
spu_write_wait();
playpoint = readl(0xa0810004 + 4);
} while (((playpoint * samplelength) > currentpoint)
&& ((playpoint * samplelength) <
(currentpoint + total_count)));
if ((currentpoint + total_count) > 0x8000) {
currentpoint = 0;
do {
if ((chanh->freq < 23000) || (sleeps > 0))
interruptible_sleep_on_timeout(&
(devc->
open_wait),
1);
spu_write_wait();
playpoint = readl(0xa0810004 + 4);
} while ((playpoint * samplelength) <= total_count);
}
return 0;
}
static ssize_t aica_audio_write(struct file *file,
const char *buffer,
size_t count, loff_t * ppos)
{
aica_dev_t *devc = (aica_dev_t *) (file->private_data);
stereo = chanh->flags & 1;
BUFFER = kmalloc(count, GFP_KERNEL);
copy_from_user(BUFFER, buffer, count);
int count_out = count;
samplelength = 1;
if (chanh->sfmt == SM_16BIT)
samplelength = 2;
else if (devc->sformat == AFMT_U8)
convert_u8tos8(BUFFER, count);
if (stereo) {
if (aica_audio_process_stereo(&count_out, &count) != 0)
return -1;
BUFFERR = BUFFER2;
}
total_count = count_out;
BUFFERL = BUFFER;
BUFFER = NULL;
BUFFER2 = NULL;
if (devc->last_write_length > 0) {
aica_audio_tidy_buffers(devc);
}
spu_memload(0x11000 + currentpoint, BUFFERL, total_count);
if (stereo)
spu_memload(0x21000 + currentpoint, BUFFERR, total_count);
if (BUFFERR)
kfree(BUFFERR);
kfree(BUFFERL);
BUFFERL = NULL;
BUFFERR = NULL;
currentpoint += total_count;
if (devc->last_write_length == 0) {
chanh->pos = 0;
spu_memload(0x10004, (uint8_t *) chanh,
sizeof(aica_channel));
chn_start();
}
devc->last_write_length = total_count;
total_count = 0;
return count;
}
static int aica_audio_ioctl(struct inode *inode, struct file *filip,
unsigned int cmd, unsigned long arg)
{
aica_dev_t *devc = (aica_dev_t *) (filip->private_data);
int newdata, left, right, s, m;
audio_buf_info info;
switch (cmd) {
case SNDCTL_DSP_GETCAPS:
put_user(DSP_CAP_TRIGGER | DSP_CAP_REALTIME, (int *) arg);
return 0;
case SNDCTL_DSP_SETFMT:
get_user(newdata, (int *) arg);
switch (newdata) {
case AFMT_U8:
devc->sformat = AFMT_U8;
chanh->sfmt = SM_8BIT;
break;
case AFMT_S16_LE:
devc->sformat = AFMT_S16_LE;
chanh->sfmt = SM_16BIT;
break;
case AFMT_S8:
devc->sformat = AFMT_S8;
chanh->sfmt = SM_8BIT;
break;
case AFMT_IMA_ADPCM:
devc->sformat = AFMT_IMA_ADPCM;
chanh->sfmt = SM_ADPCM;
break;
default:
devc->sformat = AFMT_U8;
chanh->sfmt = SM_8BIT;
/* have set a default format
but should return an error */
return -ENOTTY;
}
put_user(devc->sformat, (int *) arg);
return 0;
case SNDCTL_DSP_GETFMTS:
newdata = AFMT_S8 | AFMT_S16_LE | AFMT_IMA_ADPCM;
put_user(newdata, (int *) arg);
return 0;
case SNDCTL_DSP_SPEED:
get_user(newdata, (int *) arg);
if (newdata < 10000) {
chanh->freq = 8000;
} else if (newdata < 11750) {
chanh->freq = 11025;
} else if (newdata < 15000) {
chanh->freq = 12000;
} else if (newdata < 20000) {
chanh->freq = 16000;
} else if (newdata < 23000) {
chanh->freq = 22050;
} else if (newdata < 30000) {
chanh->freq = 24000;
} else if (newdata < 41000) {
chanh->freq = 32000;
} else
chanh->freq = 44100;
put_user(chanh->freq, (int *) arg);
return 0;
case SNDCTL_DSP_RESET:
chn_halt();
spu_memset(0x21000, 0, 0x8000);
spu_memset(0x11000, 0, 0x8000);
currentpoint = 0;
return 0;
case SNDCTL_DSP_GETBLKSIZE:
put_user(buffer_size, (int *) arg);
return 0;
case SNDCTL_DSP_SETFRAGMENT:
get_user(newdata, (int *) arg);
s = newdata & 0xffff;
if (s > 14)
s = 14;
else if (s < 4)
s = 4;
buffer_size = 1 << s;
m = 0x7fff;
arg = (m << 16) | s;
put_user(0x010f, (int *) arg);
return 0;
/* bytes left to play */
case SNDCTL_DSP_GETODELAY:
spu_write_wait();
s = readl(0xa0810004 + 4);
if ((s * samplelength) > currentpoint) {
newdata =
currentpoint + 0x8000 - (s * samplelength);
} else
newdata = currentpoint - (s * samplelength);
put_user(newdata, (int *) arg);
return 0;
/* How many fragments till writing blocks? */
case SNDCTL_DSP_GETOSPACE:
spu_write_wait();
s = readl(0xa0810004 + 4);
if ((s * samplelength) > currentpoint) {
info.fragments =
((s * samplelength) -
currentpoint) / buffer_size;
} else
info.fragments =
((0x8000 - currentpoint) +
(s * samplelength)) / buffer_size;
info.fragstotal = 0x8000 / buffer_size;
info.fragsize = buffer_size;
info.bytes = info.fragments * buffer_size;
copy_to_user((audio_buf_info *) arg, &info, sizeof(info));
return 0;
case SNDCTL_DSP_SYNC:
case SNDCTL_DSP_POST:
spu_write_wait();
s = readl(0xa0810004 + 4);
if ((s * samplelength) > currentpoint) {
newdata =
currentpoint + 0x8000 - (s * samplelength);
} else
newdata = currentpoint - (s * samplelength);
newdata = newdata / samplelength;
/* delay in milliseconds */
newdata = (newdata * 1000) / chanh->freq;
newdata = (newdata * HZ) / 1000;
interruptible_sleep_on_timeout(&(devc->open_wait),
newdata);
chn_halt();
spu_memset(0x21000, 0, 0x8000);
spu_memset(0x11000, 0, 0x8000);
currentpoint = 0;
return 0;
case SNDCTL_DSP_STEREO:
get_user(newdata, (int *) arg);
if (newdata == 1) {
chanh->flags |= 0x01;
} else
newdata = 0;
put_user(newdata, (int *) arg);
return 0;
case SNDCTL_DSP_CHANNELS:
get_user(newdata, (int *) arg);
if (newdata >= 2) {
newdata = 2;
chanh->flags |= 0x01;
} else
newdata = 1;
put_user(newdata, (int *) arg);
return 0;
/* Supported Mixer ioctls */
case SOUND_MIXER_READ_DEVMASK:
newdata = SOUND_MASK_PCM | SOUND_MASK_VOLUME;
put_user(newdata, (int *) arg);
return 0;
case SOUND_MIXER_WRITE_VOLUME:
case SOUND_MIXER_WRITE_PCM:
get_user(newdata, (int *) arg);
left = newdata & 0xff;
right = (newdata & 0xff00) >> 8;
left_volume = left;
right_volume = right;
chanh->vol = (left * 255) / 100;
newdata = ((right * 255) / 100) << 8;
newdata = newdata | 0xff;
chanh->flags &= newdata;
right = right << 8;
newdata = left | right;
put_user(newdata, (int *) arg);
return 0;
default:
return -ENOTTY;
}
}
static struct file_operations aica_audio_fops = {
owner:THIS_MODULE,
open:aica_audio_open,
release:aica_audio_release,
write:aica_audio_write,
ioctl:aica_audio_ioctl,
};
/* Mixer code
very basic currently */
static int aica_mixer_open(struct inode *inode, struct file *file)
{
MOD_INC_USE_COUNT;
return 0;
}
static int aica_mixer_release(struct inode *inode, struct file *file)
{
MOD_DEC_USE_COUNT;
return 0;
}
static int aica_mixer_ioctl(struct inode *inode, struct file *filip,
unsigned int cmd, unsigned long arg)
{
aica_dev_t *devc = aica_dev_list;
if (devc == NULL)
return -1;
int newdata, left, right;
switch (cmd) {
case SOUND_MIXER_READ_DEVMASK:
newdata = SOUND_MASK_PCM | SOUND_MASK_VOLUME;
put_user(newdata, (int *) arg);
return 0;
case SOUND_MIXER_WRITE_VOLUME:
case SOUND_MIXER_WRITE_PCM:
get_user(newdata, (int *) arg);
left = newdata & 0xff;
right = (newdata & 0xff00) >> 8;
left_volume = left;
right_volume = right;
chanh->vol = (left * 255) / 100;
newdata = ((right * 255) / 100) << 8;
newdata = newdata | 0xff;
chanh->flags &= newdata;
right = right << 8;
newdata = left | right;
put_user(newdata, (int *) arg);
return 0;
default:
return -ENOTTY;
}
}
static struct file_operations aica_mixer_fops = {
owner:THIS_MODULE,
open:aica_mixer_open,
release:aica_mixer_release,
ioctl:aica_mixer_ioctl,
};
/* Create holder for device,
together with wait queue
and then register device
with underlying OSS code
*/
static int __init attach_aica(void)
{
printk
("AICA audio device driver for Dreamcast Linux - ver 0.1-pre15\n");
aica_dev_t *devc = NULL;
sema_init(&dsp_mutex, 1);
int err = -ENOMEM;
devc = kmalloc(sizeof(aica_dev_t), GFP_KERNEL);
if (devc == NULL)
goto fail0;
init_waitqueue_head(&devc->open_wait);
devc->audio_minor = register_sound_dsp(&aica_audio_fops, -1);
if (devc->audio_minor < 0) {
DEBGM("attach_aica: register_sound_dsp error %d\n", err);
err = devc->audio_minor;
goto faildsp;
}
devc->mixer_minor = register_sound_mixer(&aica_mixer_fops, -1);
if (devc->mixer_minor < 0) {
DEBGM("attach_aica: register_sound_mixer error %d\n", err);
err = devc->mixer_minor;
goto failmixer;
}
devc->next_dev = NULL;
devc->channel = 0;
aica_dev_list = devc;
return 0;
failmixer:
unregister_sound_dsp(devc->audio_minor);
faildsp:
kfree(devc);
devc = NULL;
fail0:
DEBGM("AICA load failed\n");
return err;
return 0;
}
static int __exit unload_aica(void)
{
aica_dev_t *devc;
aica_dev_t *devcp;
devcp = aica_dev_list;
if (!devcp)
return -ENODEV;
while (1) {
devc = devcp;
unregister_sound_mixer(devc->mixer_minor);
unregister_sound_dsp(devc->audio_minor);
devcp = devc->next_dev;
kfree(devc);
if (!devcp)
break;
}
return 0;
}
/* Lock iomem and initialise
ARM7 processor
*/
static int __init init_aica(void)
{
BUFFER = NULL;
BUFFER2 = NULL;
BUFFERL = NULL;
BUFFERR = NULL;
if (request_mem_region(0xa0702c00, 4, "AICA ARM control") == NULL) {
DEBGM
("Could not take ownership of SPU control register\n");
return -ENODEV;
}
if (request_mem_region(0xa0800000, 0x200000, "AICA Sound RAM") ==
NULL) {
DEBGM("Could not take ownership of sound RAM\n");
return -ENOMEM;
}
spu_init();
if (attach_aica()) {
DEBGM("Failed to initialise AICA sound driver\n");
return -EINVAL;
}
DEBGM("AICA sound driver has been initialised\n");
return 0;
}
static void __exit exit_aica(void)
{
DEBGM("AICA sound driver being unloaded...\n");
if (unload_aica())
DEBGM("Error in unloading AICA\n");
spu_init();
release_mem_region(0xa0702c00, 4);
release_mem_region(0xa0800000, 0x200000);
}
module_init(init_aica);
module_exit(exit_aica);
MODULE_AUTHOR("Adrian McMenamin");
MODULE_DESCRIPTION("Basic OSS sound driver for Linux/DC");
|
|
From: M. R. B. <mr...@us...> - 2002-10-29 15:38:19
|
Update of /cvsroot/linuxdc/linux-sh-dc/drivers/sound/aica In directory usw-pr-cvs1:/tmp/cvs-serv19306 Modified Files: main.c Log Message: Added $ keyword - properly this time Index: main.c =================================================================== RCS file: /cvsroot/linuxdc/linux-sh-dc/drivers/sound/aica/main.c,v retrieving revision 1.7 retrieving revision 1.8 diff -u -d -r1.7 -r1.8 --- main.c 29 Oct 2002 15:37:09 -0000 1.7 +++ main.c 29 Oct 2002 15:38:16 -0000 1.8 @@ -17,7 +17,7 @@ == This drives the SH4 end of the sound driver ========================================================= ======================================================= - $Id + $Id$ */ #include <linux/init.h> |
|
From: M. R. B. <mr...@us...> - 2002-10-29 15:37:11
|
Update of /cvsroot/linuxdc/linux-sh-dc/drivers/sound/aica In directory usw-pr-cvs1:/tmp/cvs-serv18474 Modified Files: main.c Log Message: Added keyword Index: main.c =================================================================== RCS file: /cvsroot/linuxdc/linux-sh-dc/drivers/sound/aica/main.c,v retrieving revision 1.6 retrieving revision 1.7 diff -u -d -r1.6 -r1.7 --- main.c 18 Oct 2002 22:19:28 -0000 1.6 +++ main.c 29 Oct 2002 15:37:09 -0000 1.7 @@ -16,7 +16,9 @@ == == This drives the SH4 end of the sound driver ========================================================= -=======================================================*/ +======================================================= + $Id + */ #include <linux/init.h> #include <linux/config.h> |
|
From: M. R. B. <mr...@us...> - 2002-10-29 15:35:57
|
Update of /cvsroot/linuxdc/linux-sh-dc/sound/oss/aica
In directory usw-pr-cvs1:/tmp/cvs-serv17809
Added Files:
Tag: 1.1
arm7.h
Log Message:
Moved.
--- NEW FILE: arm7.h ---
/* begin binary data: */
char bin_arm7[] = /* 3396 */
{ 0x20, 0x00, 0x00, 0xEA, 0x26, 0x00, 0x00, 0xEA, 0x25, 0x00, 0x00, 0xEA,
0x25, 0x00, 0x00, 0xEA, 0x24, 0x00, 0x00, 0xEA, 0x23, 0x00,
0x00, 0xEA, 0x22, 0x00, 0x00, 0xEA, 0x50, 0x80, 0x9F, 0xE5,
0x00, 0x90, 0x98, 0xE5, 0x07, 0x90, 0x09, 0xE2, 0x02, 0x00,
0x59, 0xE3, 0x09, 0x00, 0x00, 0x1A, 0x48, 0x80, 0x8F, 0xE2,
0x00, 0x90, 0x98, 0xE5, 0x01, 0x90, 0x89, 0xE2, 0x00, 0x90,
0x88, 0xE5, 0x34, 0x80, 0x9F, 0xE5, 0xF6, 0x90, 0xA0, 0xE3,
0x10, 0x90, 0x88, 0xE5, 0x40, 0x90, 0xA0, 0xE3, 0x24, 0x90,
0x88, 0xE5, 0xFF, 0xFF, 0xFF, 0xEA, 0x18, 0x80, 0x9F, 0xE5,
0x01, 0x90, 0xA0, 0xE3, 0x00, 0x90, 0x88, 0xE5, 0x00, 0x90,
0x88, 0xE5, 0x00, 0x90, 0x88, 0xE5, 0x00, 0x90, 0x88, 0xE5,
0x04, 0xF0, 0x5E, 0xE2, 0x00, 0x2D, 0x80, 0x00, 0x04, 0x2D,
0x80, 0x00, 0x80, 0x28, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
0xD4, 0x00, 0x00, 0x00, 0x0B, 0xDA, 0xA0, 0xE3, 0x00, 0xA0,
0x0F, 0xE1, 0x80, 0xA0, 0x8A, 0xE3, 0x40, 0xA0, 0xCA, 0xE3,
0x0A, 0xF0, 0x29, 0xE1, 0xA1, 0x00, 0x00, 0xEB, 0xFE, 0xFF,
0xFF, 0xEA, 0x0E, 0xF0, 0xA0, 0xE1, 0x04, 0xF0, 0x4E, 0xE2,
0x0D, 0xC0, 0xA0, 0xE1, 0x00, 0xD8, 0x2D, 0xE9, 0x1C, 0x30,
0x9F, 0xE5, 0x04, 0xB0, 0x4C, 0xE2, 0x00, 0x20, 0x93, 0xE5,
0x03, 0x10, 0xA0, 0xE1, 0x00, 0x20, 0x82, 0xE0, 0x00, 0x30,
0x91, 0xE5, 0x02, 0x00, 0x53, 0xE1, 0xFC, 0xFF, 0xFF, 0xDA,
0x00, 0xA8, 0x1B, 0xE9, 0x80, 0x00, 0x00, 0x00, 0x0D, 0xC0,
0xA0, 0xE1, 0xF0, 0xDF, 0x2D, 0xE9, 0x04, 0xB0, 0x4C, 0xE2,
0x00, 0x40, 0xA0, 0xE1, 0x1C, 0x20, 0xA0, 0xE3, 0xD8, 0x80,
0x9F, 0xE5, 0x14, 0xD0, 0x4D, 0xE2, 0x00, 0x30, 0x98, 0xE5,
0x84, 0x92, 0xA0, 0xE1, 0x03, 0xC0, 0x89, 0xE0, 0x02, 0x10,
0x9C, 0xE7, 0x18, 0x30, 0xA0, 0xE3, 0x03, 0x20, 0x9C, 0xE7,
0x00, 0x00, 0x52, 0xE3, 0x01, 0xA0, 0xA0, 0x13, 0x02, 0xA0,
0xA0, 0x03, 0x01, 0x60, 0x11, 0xE2, 0x2B, 0x00, 0x00, 0x0A,
0x02, 0x09, 0xA0, 0xE3, 0x0A, 0x10, 0xA0, 0xE1, 0x18, 0x60,
0x9C, 0xE5, 0x6E, 0x01, 0x00, 0xEB, 0x00, 0x00, 0x8D, 0xE5,
0x00, 0x50, 0xA0, 0xE3, 0x00, 0x30, 0x98, 0xE5, 0x05, 0x00,
0xA0, 0xE1, 0x03, 0x30, 0x89, 0xE0, 0x0C, 0x20, 0x93, 0xE5,
0x11, 0x1A, 0xA0, 0xE3, 0x04, 0x20, 0x8D, 0xE5, 0x10, 0x70,
0xA0, 0xE3, 0x07, 0xC0, 0x93, 0xE7, 0x01, 0x40, 0xA0, 0xE3,
0x0C, 0x50, 0x8D, 0xE5, 0x06, 0x20, 0xA0, 0xE1, 0x10, 0x40,
0x8D, 0xE5, 0x05, 0x30, 0xA0, 0xE1, 0x08, 0xC0, 0x8D, 0xE5,
0xB5, 0x00, 0x00, 0xEB, 0x02, 0x09, 0xA0, 0xE3, 0x00, 0x30,
0x98, 0xE5, 0x0A, 0x10, 0xA0, 0xE1, 0x03, 0x30, 0x89, 0xE0,
0x18, 0x60, 0x93, 0xE5, 0x57, 0x01, 0x00, 0xEB, 0x00, 0x20,
0x98, 0xE5, 0x00, 0x00, 0x8D, 0xE5, 0x02, 0x20, 0x89, 0xE0,
0x0C, 0x30, 0x92, 0xE5, 0x04, 0x00, 0xA0, 0xE1, 0x04, 0x30,
0x8D, 0xE5, 0x21, 0x1A, 0xA0, 0xE3, 0x07, 0xC0, 0x92, 0xE7,
0xFF, 0x30, 0xA0, 0xE3, 0x0C, 0x30, 0x8D, 0xE5, 0x05, 0x30,
0xA0, 0xE1, 0x10, 0x40, 0x8D, 0xE5, 0x06, 0x20, 0xA0, 0xE1,
0x08, 0xC0, 0x8D, 0xE5, 0xA0, 0x00, 0x00, 0xEB, 0x17, 0x00,
0x00, 0xEA, 0x40, 0x09, 0x00, 0x00, 0x02, 0x09, 0xA0, 0xE3,
0x0A, 0x10, 0xA0, 0xE1, 0x18, 0x50, 0x9C, 0xE5, 0x42, 0x01,
0x00, 0xEB, 0x00, 0x00, 0x8D, 0xE5, 0x04, 0x00, 0xA0, 0xE1,
0x00, 0xE0, 0x98, 0xE5, 0x0C, 0x30, 0xA0, 0xE3, 0x0E, 0xE0,
0x89, 0xE0, 0x03, 0x20, 0x9E, 0xE7, 0x11, 0x1A, 0xA0, 0xE3,
0x04, 0x20, 0x8D, 0xE5, 0x04, 0x30, 0x83, 0xE2, 0x03, 0xC0,
0x9E, 0xE7, 0x14, 0x20, 0xA0, 0xE3, 0x08, 0xC0, 0x8D, 0xE5,
0x06, 0x30, 0xA0, 0xE1, 0x02, 0x40, 0x9E, 0xE7, 0x01, 0xC0,
0xA0, 0xE3, 0x10, 0xC0, 0x8D, 0xE5, 0x05, 0x20, 0xA0, 0xE1,
0x0C, 0x40, 0x8D, 0xE5, 0x87, 0x00, 0x00, 0xEB, 0xF0, 0xAF,
0x1B, 0xE9, 0x0D, 0xC0, 0xA0, 0xE1, 0x00, 0xD8, 0x2D, 0xE9,
0x04, 0xB0, 0x4C, 0xE2, 0x00, 0x00, 0x50, 0xE3, 0x03, 0x00,
0x00, 0x1A, 0xEC, 0x00, 0x00, 0xEB, 0x01, 0x00, 0xA0, 0xE3,
0xEA, 0x00, 0x00, 0xEB, 0x00, 0xA8, 0x1B, 0xE9, 0xE8, 0x00,
0x00, 0xEB, 0x00, 0xA8, 0x1B, 0xE9, 0x0D, 0xC0, 0xA0, 0xE1,
0x30, 0xD8, 0x2D, 0xE9, 0x04, 0xB0, 0x4C, 0xE2, 0x00, 0xC0,
0x50, 0xE2, 0x0A, 0x00, 0x00, 0x1A, 0x44, 0x50, 0x9F, 0xE5,
0x00, 0x30, 0x95, 0xE5, 0x10, 0x40, 0xA0, 0xE3, 0x04, 0x10,
0x93, 0xE7, 0x0C, 0x00, 0xA0, 0xE1, 0xE5, 0x00, 0x00, 0xEB,
0x00, 0x30, 0x95, 0xE5, 0x04, 0x10, 0x93, 0xE7, 0x01, 0x00,
0xA0, 0xE3, 0xE1, 0x00, 0x00, 0xEB, 0x30, 0xA8, 0x1B, 0xE9,
0x18, 0x20, 0x9F, 0xE5, 0x00, 0x30, 0x92, 0xE5, 0x10, 0x00,
0xA0, 0xE3, 0x8C, 0x32, 0x83, 0xE0, 0x00, 0x10, 0x93, 0xE7,
0x0C, 0x00, 0xA0, 0xE1, 0xD9, 0x00, 0x00, 0xEB, 0x30, 0xA8,
0x1B, 0xE9, 0x40, 0x09, 0x00, 0x00, 0x0D, 0xC0, 0xA0, 0xE1,
0x00, 0xD8, 0x2D, 0xE9, 0x4C, 0x30, 0x9F, 0xE5, 0x00, 0x20,
0x93, 0xE5, 0x01, 0x00, 0x40, 0xE2, 0x80, 0x32, 0x92, 0xE7,
0x04, 0xB0, 0x4C, 0xE2, 0x03, 0x00, 0x53, 0xE3, 0x03, 0xF1,
0x9F, 0x97, 0x0B, 0x00, 0x00, 0xEA, 0x1C, 0x03, 0x00, 0x00,
0xFC, 0x02, 0x00, 0x00, 0x10, 0x03, 0x00, 0x00, 0x18, 0x03,
0x00, 0x00, 0x76, 0xFF, 0xFF, 0xEB, 0x1C, 0x20, 0x9F, 0xE5,
0x00, 0x30, 0xA0, 0xE3, 0x00, 0x30, 0x82, 0xE5, 0x00, 0xA8,
0x1B, 0xE9, 0xC7, 0xFF, 0xFF, 0xEB, 0xF9, 0xFF, 0xFF, 0xEA,
0xD0, 0xFF, 0xFF, 0xEB, 0x00, 0xA8, 0x1B, 0xE9, 0x40, 0x09,
0x00, 0x00, 0x48, 0x0D, 0x00, 0x00, 0x0D, 0xC0, 0xA0, 0xE1,
0x30, 0xD8, 0x2D, 0xE9, 0x04, 0xB0, 0x4C, 0xE2, 0x1A, 0x00,
0x00, 0xEB, 0x0A, 0x3B, 0xA0, 0xE3, 0x0D, 0x30, 0x83, 0xE2,
0x02, 0x35, 0x83, 0xE2, 0x00, 0x20, 0xA0, 0xE3, 0x00, 0x20,
0xC3, 0xE5, 0x44, 0x50, 0x9F, 0xE5, 0x44, 0x40, 0x9F, 0xE5,
0x00, 0x20, 0x95, 0xE5, 0x00, 0x00, 0x92, 0xE5, 0x00, 0x00,
0x50, 0xE3, 0x03, 0x00, 0x00, 0xAA, 0x02, 0x01, 0xC0, 0xE3,
0x00, 0x30, 0xA0, 0xE3, 0x00, 0x30, 0x82, 0xE5, 0xD3, 0xFF,
0xFF, 0xEB, 0x0A, 0x3B, 0xA0, 0xE3, 0x14, 0x30, 0x83, 0xE2,
0x00, 0x10, 0x94, 0xE5, 0x02, 0x35, 0x83, 0xE2, 0x00, 0x20,
0x93, 0xE5, 0x0A, 0x00, 0xA0, 0xE3, 0x04, 0x20, 0x81, 0xE5,
0x45, 0xFF, 0xFF, 0xEB, 0xEE, 0xFF, 0xFF, 0xEA, 0x3C, 0x09,
0x00, 0x00, 0x40, 0x09, 0x00, 0x00, 0x30, 0xA8, 0x1B, 0xE9,
0x0D, 0xC0, 0xA0, 0xE1, 0xF0, 0xD8, 0x2D, 0xE9, 0x04, 0xB0,
0x4C, 0xE2, 0x00, 0x20, 0xA0, 0xE3, 0x02, 0x00, 0xA0, 0xE1,
0x02, 0x35, 0xA0, 0xE3, 0x03, 0x40, 0xA0, 0xE1, 0x00, 0x50,
0xA0, 0xE1, 0x02, 0x79, 0xA0, 0xE3, 0x14, 0xE0, 0xA0, 0xE3,
0x03, 0xE0, 0x8E, 0xE0, 0x1F, 0x60, 0xA0, 0xE3, 0x0A, 0x3B,
0x83, 0xE2, 0x00, 0x20, 0x83, 0xE5, 0x00, 0x20, 0xA0, 0xE3,
0x01, 0xC0, 0x80, 0xE2, 0x80, 0x13, 0xA0, 0xE1, 0x02, 0x30,
0x81, 0xE0, 0x04, 0x20, 0x82, 0xE2, 0x7F, 0x00, 0x52, 0xE3,
0x04, 0x50, 0x83, 0xE7, 0xFA, 0xFF, 0xFF, 0xDA, 0x80, 0x73,
0x84, 0xE7, 0x80, 0x63, 0x8E, 0xE7, 0x0C, 0x00, 0xA0, 0xE1,
0x3F, 0x00, 0x50, 0xE3, 0xF2, 0xFF, 0xFF, 0xDA, 0x02, 0x35,
0xA0, 0xE3, 0x0A, 0x3B, 0x83, 0xE2, 0x0F, 0x20, 0xA0, 0xE3,
0x00, 0x20, 0x83, 0xE5, 0xF0, 0xA8, 0x1B, 0xE9, 0x0D, 0xC0,
0xA0, 0xE1, 0x00, 0xD8, 0x2D, 0xE9, 0xA0, 0x00, 0xA0, 0xE1,
0x7F, 0x00, 0x00, 0xE2, 0x10, 0x30, 0x9F, 0xE5, 0x80, 0x00,
0x80, 0xE2, 0x00, 0x01, 0x93, 0xE7, 0x04, 0xB0, 0x4C, 0xE2,
0xFF, 0x00, 0x60, 0xE2, 0x00, 0xA8, 0x1B, 0xE9, 0x44, 0x09,
0x00, 0x00, 0x0D, 0xC0, 0xA0, 0xE1, 0xF0, 0xDF, 0x2D, 0xE9,
0x04, 0xB0, 0x4C, 0xE2, 0x56, 0x48, 0xA0, 0xE3, 0x22, 0x4C,
0x84, 0xE2, 0x10, 0xD0, 0x4D, 0xE2, 0x0C, 0x90, 0x9B, 0xE5,
0x07, 0x80, 0xA0, 0xE3, 0x10, 0xA0, 0x9B, 0xE5, 0x00, 0x70,
0xA0, 0xE1, 0x2C, 0x10, 0x0B, 0xE5, 0x30, 0x20, 0x0B, 0xE5,
0x03, 0x60, 0xA0, 0xE1, 0x08, 0x50, 0x9B, 0xE5, 0x5C, 0x00,
0x00, 0xEB, 0xFF, 0x30, 0xA0, 0xE3, 0x00, 0x00, 0xA0, 0xE1,
0x00, 0x00, 0xA0, 0xE1, 0x00, 0x00, 0xA0, 0xE1, 0x00, 0x00,
0xA0, 0xE1, 0x01, 0x30, 0x53, 0xE2, 0xF9, 0xFF, 0xFF, 0x5A,
0x09, 0x00, 0xA0, 0xE1, 0xDC, 0xFF, 0xFF, 0xEB, 0x00, 0x90,
0xA0, 0xE1, 0x80, 0x00, 0x5A, 0xE3, 0x00, 0xA0, 0xA0, 0x03,
0x02, 0x00, 0x00, 0x0A, 0x7F, 0x00, 0x5A, 0xE3, 0x0F, 0xA0,
0xA0, 0xC3, 0x1F, 0xA0, 0xA0, 0xD3, 0x08, 0xC0, 0xA0, 0xE3,
0x02, 0xC5, 0x8C, 0xE2, 0xFF, 0x1C, 0xA0, 0xE3, 0xFF, 0x10,
0x81, 0xE2, 0x0C, 0x00, 0xA0, 0xE3, 0x07, 0x00, 0x78, 0xE3,
0x00, 0x30, 0xA0, 0xB3, 0x01, 0x30, 0xA0, 0xA3, 0x04, 0x00,
0x55, 0xE1, 0x00, 0x30, 0xA0, 0x23, 0x01, 0x20, 0x06, 0xE0,
0x87, 0x23, 0x8C, 0xE7, 0x00, 0x00, 0x53, 0xE3, 0x04, 0x30,
0x9B, 0xE5, 0x02, 0x05, 0x80, 0xE2, 0x01, 0x30, 0x03, 0xE0,
0x87, 0x33, 0x80, 0xE7, 0x30, 0x10, 0x1B, 0xE5, 0x05, 0x05,
0xA0, 0xE1, 0x2C, 0x30, 0x1B, 0xE5, 0x81, 0x13, 0xA0, 0xE1,
0x34, 0x10, 0x0B, 0xE5, 0x23, 0x38, 0xA0, 0xE1, 0x38, 0x30,
0x0B, 0xE5, 0x08, 0x00, 0x00, 0x0A, 0xA4, 0x40, 0xA0, 0xE1,
0x01, 0x80, 0x48, 0xE2, 0x07, 0x00, 0x78, 0xE3, 0x00, 0x30,
0xA0, 0xB3, 0x01, 0x30, 0xA0, 0xA3, 0x04, 0x00, 0x55, 0xE1,
0x00, 0x30, 0xA0, 0x23, 0x00, 0x00, 0x53, 0xE3, 0xF6, 0xFF,
0xFF, 0x1A, 0x04, 0x10, 0xA0, 0xE1, 0x91, 0x00, 0x00, 0xEB,
0x18, 0x30, 0xA0, 0xE3, 0x02, 0x35, 0x83, 0xE2, 0x00, 0x0B,
0xA0, 0xE1, 0x20, 0x0B, 0xA0, 0xE1, 0x25, 0xC0, 0xA0, 0xE3,
0x02, 0xC5, 0x8C, 0xE2, 0x28, 0xE0, 0xA0, 0xE3, 0x02, 0xE5,
0x8E, 0xE2, 0x29, 0x40, 0xA0, 0xE3, 0x02, 0x45, 0x84, 0xE2,
0x10, 0x50, 0xA0, 0xE3, 0x88, 0x05, 0x80, 0xE1, 0x87, 0x03,
0x83, 0xE7, 0x24, 0x00, 0xA0, 0xE3, 0x02, 0x35, 0x80, 0xE2,
0x87, 0xA3, 0xC3, 0xE7, 0x0F, 0x20, 0xA0, 0xE3, 0x87, 0x23,
0xCC, 0xE7, 0x02, 0x55, 0x85, 0xE2, 0x87, 0x03, 0xCE, 0xE7,
0x04, 0x60, 0xA0, 0xE3, 0x14, 0x30, 0x9B, 0xE5, 0x02, 0x65,
0x86, 0xE2, 0x87, 0x93, 0xC4, 0xE7, 0x00, 0x00, 0x53, 0xE3,
0x1F, 0x30, 0xA0, 0xE3, 0x87, 0x33, 0x85, 0xE7, 0xFF, 0x1C,
0xA0, 0xE3, 0x2C, 0x30, 0x1B, 0xE5, 0xFF, 0x10, 0x81, 0xE2,
0x01, 0x10, 0x03, 0xE0, 0x87, 0x13, 0x86, 0xE7, 0x38, 0x10,
0x1B, 0x15, 0xC2, 0x3C, 0x81, 0x13, 0x38, 0x10, 0x1B, 0x05,
0x03, 0x39, 0x81, 0x03, 0x34, 0x10, 0x1B, 0xE5, 0x02, 0x25,
0xA0, 0xE3, 0x03, 0x30, 0x81, 0xE1, 0x87, 0x33, 0x82, 0xE7,
0xF0, 0xAF, 0x1B, 0xE9, 0x0D, 0xC0, 0xA0, 0xE1, 0x00, 0xD8,
0x2D, 0xE9, 0x02, 0x25, 0xA0, 0xE3, 0x80, 0x33, 0x92, 0xE7,
0x04, 0xB0, 0x4C, 0xE2, 0x01, 0x39, 0xC3, 0xE3, 0x02, 0x39,
0x83, 0xE3, 0x80, 0x33, 0x82, 0xE7, 0x00, 0xA8, 0x1B, 0xE9,
0x0D, 0xC0, 0xA0, 0xE1, 0x10, 0xD8, 0x2D, 0xE9, 0x04, 0xB0,
0x4C, 0xE2, 0x00, 0x40, 0xA0, 0xE1, 0x01, 0x00, 0xA0, 0xE1,
0x79, 0xFF, 0xFF, 0xEB, 0x29, 0x30, 0xA0, 0xE3, 0x02, 0x35,
0x83, 0xE2, 0x84, 0x03, 0xC3, 0xE7, 0x10, 0xA8, 0x1B, 0xE9,
0x0D, 0xC0, 0xA0, 0xE1, 0x00, 0xD8, 0x2D, 0xE9, 0x04, 0xB0,
0x4C, 0xE2, 0x80, 0x00, 0x51, 0xE3, 0x00, 0x10, 0xA0, 0x03,
0x02, 0x00, 0x00, 0x0A, 0x7F, 0x00, 0x51, 0xE3, 0x0F, 0x10,
0xA0, 0xC3, 0x1F, 0x10, 0xA0, 0xD3, 0x24, 0x30, 0xA0, 0xE3,
0x02, 0x35, 0x83, 0xE2, 0x80, 0x13, 0xC3, 0xE7, 0x00, 0xA8,
0x1B, 0xE9, 0x0D, 0xC0, 0xA0, 0xE1, 0x30, 0xD8, 0x2D, 0xE9,
0x04, 0xB0, 0x4C, 0xE2, 0x56, 0x28, 0xA0, 0xE3, 0x22, 0x2C,
0x82, 0xE2, 0x07, 0x40, 0xA0, 0xE3, 0x02, 0x00, 0x51, 0xE1,
0x00, 0x50, 0xA0, 0xE1, 0x08, 0x00, 0x00, 0x2A, 0xA2, 0x20,
0xA0, 0xE1, 0x01, 0x40, 0x44, 0xE2, 0x07, 0x00, 0x74, 0xE3,
0x00, 0x30, 0xA0, 0xB3, 0x01, 0x30, 0xA0, 0xA3, 0x02, 0x00,
0x51, 0xE1, 0x00, 0x30, 0xA0, 0x23, 0x00, 0x00, 0x53, 0xE3,
0xF6, 0xFF, 0xFF, 0x1A, 0x01, 0x05, 0xA0, 0xE1, 0x02, 0x10,
0xA0, 0xE1, 0x33, 0x00, 0x00, 0xEB, 0x18, 0x30, 0xA0, 0xE3,
0x02, 0x35, 0x83, 0xE2, 0x00, 0x0B, 0xA0, 0xE1, 0x20, 0x0B,
0xA0, 0xE1, 0x84, 0x05, 0x80, 0xE1, 0x85, 0x03, 0x83, 0xE7,
0x30, 0xA8, 0x1B, 0xE9, 0x01, 0xC0, 0x20, 0xE0, 0x01, 0x30,
0xA0, 0xE3, 0x00, 0x20, 0xA0, 0xE3, 0x00, 0x00, 0x51, 0xE3,
0x00, 0x10, 0x61, 0x42, 0x21, 0x00, 0x00, 0x0A, 0x00, 0x00,
0x50, 0xE3, 0x00, 0x00, 0x60, 0x42, 0x01, 0x00, 0x50, 0xE1,
0x19, 0x00, 0x00, 0x3A, 0x01, 0x02, 0x51, 0xE3, 0x00, 0x00,
0x51, 0x31, 0x01, 0x12, 0xA0, 0x31, 0x03, 0x32, 0xA0, 0x31,
0xFA, 0xFF, 0xFF, 0x3A, 0x02, 0x01, 0x51, 0xE3, 0x00, 0x00,
0x51, 0x31, 0x81, 0x10, 0xA0, 0x31, 0x83, 0x30, 0xA0, 0x31,
0xFA, 0xFF, 0xFF, 0x3A, 0x01, 0x00, 0x50, 0xE1, 0x01, 0x00,
0x40, 0x20, 0x03, 0x20, 0x82, 0x21, 0xA1, 0x00, 0x50, 0xE1,
0xA1, 0x00, 0x40, 0x20, 0xA3, 0x20, 0x82, 0x21, 0x21, 0x01,
0x50, 0xE1, 0x21, 0x01, 0x40, 0x20, 0x23, 0x21, 0x82, 0x21,
0xA1, 0x01, 0x50, 0xE1, 0xA1, 0x01, 0x40, 0x20, 0xA3, 0x21,
0x82, 0x21, 0x00, 0x00, 0x50, 0xE3, 0x23, 0x32, 0xB0, 0x11,
0x21, 0x12, 0xA0, 0x11, 0xEF, 0xFF, 0xFF, 0x1A, 0x02, 0x00,
0xA0, 0xE1, 0x00, 0x00, 0x5C, 0xE3, 0x00, 0x00, 0x60, 0x42,
0x0E, 0xF0, 0xA0, 0xE1, 0x04, 0xE0, 0x2D, 0xE5, 0x01, 0x00,
0x00, 0xEB, 0x00, 0x00, 0xA0, 0xE3, 0x00, 0x80, 0xBD, 0xE8,
0x0E, 0xF0, 0xA0, 0xE1, 0x00, 0x00, 0x51, 0xE3, 0x1F, 0x00,
0x00, 0x0A, 0x01, 0x30, 0xA0, 0xE3, 0x00, 0x20, 0xA0, 0xE3,
0x01, 0x00, 0x50, 0xE1, 0x19, 0x00, 0x00, 0x3A, 0x01, 0x02,
0x51, 0xE3, 0x00, 0x00, 0x51, 0x31, 0x01, 0x12, 0xA0, 0x31,
0x03, 0x32, 0xA0, 0x31, 0xFA, 0xFF, 0xFF, 0x3A, 0x02, 0x01,
0x51, 0xE3, 0x00, 0x00, 0x51, 0x31, 0x81, 0x10, 0xA0, 0x31,
0x83, 0x30, 0xA0, 0x31, 0xFA, 0xFF, 0xFF, 0x3A, 0x01, 0x00,
0x50, 0xE1, 0x01, 0x00, 0x40, 0x20, 0x03, 0x20, 0x82, 0x21,
0xA1, 0x00, 0x50, 0xE1, 0xA1, 0x00, 0x40, 0x20, 0xA3, 0x20,
0x82, 0x21, 0x21, 0x01, 0x50, 0xE1, 0x21, 0x01, 0x40, 0x20,
0x23, 0x21, 0x82, 0x21, 0xA1, 0x01, 0x50, 0xE1, 0xA1, 0x01,
0x40, 0x20, 0xA3, 0x21, 0x82, 0x21, 0x00, 0x00, 0x50, 0xE3,
0x23, 0x32, 0xB0, 0x11, 0x21, 0x12, 0xA0, 0x11, 0xEF, 0xFF,
0xFF, 0x1A, 0x02, 0x00, 0xA0, 0xE1, 0x0E, 0xF0, 0xA0, 0xE1,
0x04, 0xE0, 0x2D, 0xE5, 0xDA, 0xFF, 0xFF, 0xEB, 0x00, 0x00,
0xA0, 0xE3, 0x00, 0x80, 0xBD, 0xE8, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x04, 0x00, 0x01, 0x00,
0x00, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x16, 0x00,
0x00, 0x00, 0x1B, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x00,
0x23, 0x00, 0x00, 0x00, 0x27, 0x00, 0x00, 0x00, 0x2A, 0x00,
0x00, 0x00, 0x2D, 0x00, 0x00, 0x00, 0x2F, 0x00, 0x00, 0x00,
0x32, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, 0x37, 0x00,
0x00, 0x00, 0x39, 0x00, 0x00, 0x00, 0x3B, 0x00, 0x00, 0x00,
0x3D, 0x00, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x00, 0x41, 0x00,
0x00, 0x00, 0x43, 0x00, 0x00, 0x00, 0x45, 0x00, 0x00, 0x00,
0x47, 0x00, 0x00, 0x00, 0x49, 0x00, 0x00, 0x00, 0x4A, 0x00,
0x00, 0x00, 0x4C, 0x00, 0x00, 0x00, 0x4E, 0x00, 0x00, 0x00,
0x4F, 0x00, 0x00, 0x00, 0x51, 0x00, 0x00, 0x00, 0x52, 0x00,
0x00, 0x00, 0x54, 0x00, 0x00, 0x00, 0x55, 0x00, 0x00, 0x00,
0x57, 0x00, 0x00, 0x00, 0x58, 0x00, 0x00, 0x00, 0x5A, 0x00,
0x00, 0x00, 0x5B, 0x00, 0x00, 0x00, 0x5C, 0x00, 0x00, 0x00,
0x5E, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x00, 0x00, 0x60, 0x00,
0x00, 0x00, 0x62, 0x00, 0x00, 0x00, 0x63, 0x00, 0x00, 0x00,
0x64, 0x00, 0x00, 0x00, 0x66, 0x00, 0x00, 0x00, 0x67, 0x00,
0x00, 0x00, 0x68, 0x00, 0x00, 0x00, 0x69, 0x00, 0x00, 0x00,
0x6A, 0x00, 0x00, 0x00, 0x6C, 0x00, 0x00, 0x00, 0x6D, 0x00,
0x00, 0x00, 0x6E, 0x00, 0x00, 0x00, 0x6F, 0x00, 0x00, 0x00,
0x70, 0x00, 0x00, 0x00, 0x71, 0x00, 0x00, 0x00, 0x72, 0x00,
0x00, 0x00, 0x74, 0x00, 0x00, 0x00, 0x75, 0x00, 0x00, 0x00,
0x76, 0x00, 0x00, 0x00, 0x77, 0x00, 0x00, 0x00, 0x78, 0x00,
0x00, 0x00, 0x79, 0x00, 0x00, 0x00, 0x7A, 0x00, 0x00, 0x00,
0x7B, 0x00, 0x00, 0x00, 0x7C, 0x00, 0x00, 0x00, 0x7D, 0x00,
0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00,
0x80, 0x00, 0x00, 0x00, 0x81, 0x00, 0x00, 0x00, 0x82, 0x00,
0x00, 0x00, 0x83, 0x00, 0x00, 0x00, 0x84, 0x00, 0x00, 0x00,
0x85, 0x00, 0x00, 0x00, 0x86, 0x00, 0x00, 0x00, 0x87, 0x00,
0x00, 0x00, 0x88, 0x00, 0x00, 0x00, 0x89, 0x00, 0x00, 0x00,
0x8A, 0x00, 0x00, 0x00, 0x8A, 0x00, 0x00, 0x00, 0x8B, 0x00,
0x00, 0x00, 0x8C, 0x00, 0x00, 0x00, 0x8D, 0x00, 0x00, 0x00,
0x8E, 0x00, 0x00, 0x00, 0x8F, 0x00, 0x00, 0x00, 0x90, 0x00,
0x00, 0x00, 0x91, 0x00, 0x00, 0x00, 0x92, 0x00, 0x00, 0x00,
0x92, 0x00, 0x00, 0x00, 0x93, 0x00, 0x00, 0x00, 0x94, 0x00,
0x00, 0x00, 0x95, 0x00, 0x00, 0x00, 0x96, 0x00, 0x00, 0x00,
0x97, 0x00, 0x00, 0x00, 0x98, 0x00, 0x00, 0x00, 0x98, 0x00,
0x00, 0x00, 0x99, 0x00, 0x00, 0x00, 0x9A, 0x00, 0x00, 0x00,
0x9B, 0x00, 0x00, 0x00, 0x9C, 0x00, 0x00, 0x00, 0x9C, 0x00,
0x00, 0x00, 0x9D, 0x00, 0x00, 0x00, 0x9E, 0x00, 0x00, 0x00,
0x9F, 0x00, 0x00, 0x00, 0xA0, 0x00, 0x00, 0x00, 0xA0, 0x00,
0x00, 0x00, 0xA1, 0x00, 0x00, 0x00, 0xA2, 0x00, 0x00, 0x00,
0xA3, 0x00, 0x00, 0x00, 0xA4, 0x00, 0x00, 0x00, 0xA4, 0x00,
0x00, 0x00, 0xA5, 0x00, 0x00, 0x00, 0xA6, 0x00, 0x00, 0x00,
0xA7, 0x00, 0x00, 0x00, 0xA7, 0x00, 0x00, 0x00, 0xA8, 0x00,
0x00, 0x00, 0xA9, 0x00, 0x00, 0x00, 0xAA, 0x00, 0x00, 0x00,
0xAA, 0x00, 0x00, 0x00, 0xAB, 0x00, 0x00, 0x00, 0xAC, 0x00,
0x00, 0x00, 0xAD, 0x00, 0x00, 0x00, 0xAD, 0x00, 0x00, 0x00,
0xAE, 0x00, 0x00, 0x00, 0xAF, 0x00, 0x00, 0x00, 0xB0, 0x00,
0x00, 0x00, 0xB0, 0x00, 0x00, 0x00, 0xB1, 0x00, 0x00, 0x00,
0xB2, 0x00, 0x00, 0x00, 0xB2, 0x00, 0x00, 0x00, 0xB3, 0x00,
0x00, 0x00, 0xB4, 0x00, 0x00, 0x00, 0xB5, 0x00, 0x00, 0x00,
0xB5, 0x00, 0x00, 0x00, 0xB6, 0x00, 0x00, 0x00, 0xB7, 0x00,
0x00, 0x00, 0xB7, 0x00, 0x00, 0x00, 0xB8, 0x00, 0x00, 0x00,
0xB9, 0x00, 0x00, 0x00, 0xB9, 0x00, 0x00, 0x00, 0xBA, 0x00,
0x00, 0x00, 0xBB, 0x00, 0x00, 0x00, 0xBB, 0x00, 0x00, 0x00,
0xBC, 0x00, 0x00, 0x00, 0xBD, 0x00, 0x00, 0x00, 0xBD, 0x00,
0x00, 0x00, 0xBE, 0x00, 0x00, 0x00, 0xBF, 0x00, 0x00, 0x00,
0xBF, 0x00, 0x00, 0x00, 0xC0, 0x00, 0x00, 0x00, 0xC1, 0x00,
0x00, 0x00, 0xC1, 0x00, 0x00, 0x00, 0xC2, 0x00, 0x00, 0x00,
0xC3, 0x00, 0x00, 0x00, 0xC3, 0x00, 0x00, 0x00, 0xC4, 0x00,
0x00, 0x00, 0xC5, 0x00, 0x00, 0x00, 0xC5, 0x00, 0x00, 0x00,
0xC6, 0x00, 0x00, 0x00, 0xC7, 0x00, 0x00, 0x00, 0xC7, 0x00,
0x00, 0x00, 0xC8, 0x00, 0x00, 0x00, 0xC8, 0x00, 0x00, 0x00,
0xC9, 0x00, 0x00, 0x00, 0xCA, 0x00, 0x00, 0x00, 0xCA, 0x00,
0x00, 0x00, 0xCB, 0x00, 0x00, 0x00, 0xCC, 0x00, 0x00, 0x00,
0xCC, 0x00, 0x00, 0x00, 0xCD, 0x00, 0x00, 0x00, 0xCD, 0x00,
0x00, 0x00, 0xCE, 0x00, 0x00, 0x00, 0xCF, 0x00, 0x00, 0x00,
0xCF, 0x00, 0x00, 0x00, 0xD0, 0x00, 0x00, 0x00, 0xD1, 0x00,
0x00, 0x00, 0xD1, 0x00, 0x00, 0x00, 0xD2, 0x00, 0x00, 0x00,
0xD2, 0x00, 0x00, 0x00, 0xD3, 0x00, 0x00, 0x00, 0xD4, 0x00,
0x00, 0x00, 0xD4, 0x00, 0x00, 0x00, 0xD5, 0x00, 0x00, 0x00,
0xD5, 0x00, 0x00, 0x00, 0xD6, 0x00, 0x00, 0x00, 0xD7, 0x00,
0x00, 0x00, 0xD7, 0x00, 0x00, 0x00, 0xD8, 0x00, 0x00, 0x00,
0xD8, 0x00, 0x00, 0x00, 0xD9, 0x00, 0x00, 0x00, 0xD9, 0x00,
0x00, 0x00, 0xDA, 0x00, 0x00, 0x00, 0xDB, 0x00, 0x00, 0x00,
0xDB, 0x00, 0x00, 0x00, 0xDC, 0x00, 0x00, 0x00, 0xDC, 0x00,
0x00, 0x00, 0xDD, 0x00, 0x00, 0x00, 0xDD, 0x00, 0x00, 0x00,
0xDE, 0x00, 0x00, 0x00, 0xDF, 0x00, 0x00, 0x00, 0xDF, 0x00,
0x00, 0x00, 0xE0, 0x00, 0x00, 0x00, 0xE0, 0x00, 0x00, 0x00,
0xE1, 0x00, 0x00, 0x00, 0xE1, 0x00, 0x00, 0x00, 0xE2, 0x00,
0x00, 0x00, 0xE3, 0x00, 0x00, 0x00, 0xE3, 0x00, 0x00, 0x00,
0xE4, 0x00, 0x00, 0x00, 0xE4, 0x00, 0x00, 0x00, 0xE5, 0x00,
0x00, 0x00, 0xE5, 0x00, 0x00, 0x00, 0xE6, 0x00, 0x00, 0x00,
0xE6, 0x00, 0x00, 0x00, 0xE7, 0x00, 0x00, 0x00, 0xE8, 0x00,
0x00, 0x00, 0xE8, 0x00, 0x00, 0x00, 0xE9, 0x00, 0x00, 0x00,
0xE9, 0x00, 0x00, 0x00, 0xEA, 0x00, 0x00, 0x00, 0xEA, 0x00,
0x00, 0x00, 0xEB, 0x00, 0x00, 0x00, 0xEB, 0x00, 0x00, 0x00,
0xEC, 0x00, 0x00, 0x00, 0xEC, 0x00, 0x00, 0x00, 0xED, 0x00,
0x00, 0x00, 0xED, 0x00, 0x00, 0x00, 0xEE, 0x00, 0x00, 0x00,
0xEF, 0x00, 0x00, 0x00, 0xEF, 0x00, 0x00, 0x00, 0xF0, 0x00,
0x00, 0x00, 0xF0, 0x00, 0x00, 0x00, 0xF1, 0x00, 0x00, 0x00,
0xF1, 0x00, 0x00, 0x00, 0xF2, 0x00, 0x00, 0x00, 0xF2, 0x00,
0x00, 0x00, 0xF3, 0x00, 0x00, 0x00, 0xF3, 0x00, 0x00, 0x00,
0xF4, 0x00, 0x00, 0x00, 0xF4, 0x00, 0x00, 0x00, 0xF5, 0x00,
0x00, 0x00, 0xF5, 0x00, 0x00, 0x00, 0xF6, 0x00, 0x00, 0x00,
0xF6, 0x00, 0x00, 0x00, 0xF7, 0x00, 0x00, 0x00, 0xF7, 0x00,
0x00, 0x00, 0xF8, 0x00, 0x00, 0x00, 0xF8, 0x00, 0x00, 0x00,
0xF9, 0x00, 0x00, 0x00, 0xF9, 0x00, 0x00, 0x00, 0xFA, 0x00,
0x00, 0x00, 0xFA, 0x00, 0x00, 0x00, 0xFB, 0x00, 0x00, 0x00,
0xFB, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x00, 0xFC, 0x00,
0x00, 0x00, 0xFD, 0x00, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x00,
0xFF, 0x00, 0x00, 0x00
};
/* end binary data. size = 3396 bytes */
|
|
From: M. R. B. <mr...@us...> - 2002-10-29 15:33:20
|
Update of /cvsroot/linuxdc/linux-sh-dc/sound/oss/aica
In directory usw-pr-cvs1:/tmp/cvs-serv16199
Added Files:
Tag: 1.1
Makefile
Log Message:
Moved.
--- NEW FILE: Makefile ---
O_TARGET := aica.o
obj-y := main.o
obj-m := $(O_TARGET)
include $(TOPDIR)/Rules.make
clean:
rm -f core *.o *.a *.s
|
|
From: M. R. B. <mr...@us...> - 2002-10-29 15:30:43
|
Update of /cvsroot/linuxdc/linux-sh-dc/sound/oss/aica In directory usw-pr-cvs1:/tmp/cvs-serv14709/aica Log Message: Directory /cvsroot/linuxdc/linux-sh-dc/sound/oss/aica added to the repository |
|
From: M. R. B. <mr...@us...> - 2002-10-29 15:29:37
|
Update of /cvsroot/linuxdc/linux-sh-dc/sound/oss In directory usw-pr-cvs1:/tmp/cvs-serv14093/oss Log Message: Directory /cvsroot/linuxdc/linux-sh-dc/sound/oss added to the repository |
|
From: M. R. B. <mr...@us...> - 2002-10-29 15:29:15
|
Update of /cvsroot/linuxdc/linux-sh-dc/sound In directory usw-pr-cvs1:/tmp/cvs-serv13842/sound Log Message: Directory /cvsroot/linuxdc/linux-sh-dc/sound added to the repository |
|
From: M. R. B. <mr...@us...> - 2002-10-29 15:20:52
|
Update of /cvsroot/linuxdc/linux-sh-dc/arch/sh/mm In directory usw-pr-cvs1:/tmp/cvs-serv9028/arch/sh/mm Modified Files: Makefile Log Message: Linux-SH 2.5.44 switchover Index: Makefile =================================================================== RCS file: /cvsroot/linuxdc/linux-sh-dc/arch/sh/mm/Makefile,v retrieving revision 1.2 retrieving revision 1.3 diff -u -d -r1.2 -r1.3 --- Makefile 1 May 2002 10:00:20 -0000 1.2 +++ Makefile 29 Oct 2002 15:20:20 -0000 1.3 @@ -1,18 +1,10 @@ # # Makefile for the Linux SuperH-specific parts of the memory manager. # -# Note! Dependencies are done automagically by 'make dep', which also -# removes any old dependencies. DON'T put your own dependencies here -# unless it's something special (ie not a .c file). -# -# Note 2! The CFLAGS definition is now in the main makefile... -O_TARGET := mm.o obj-y := init.o fault.o extable.o clear_page.o copy_page.o obj-$(CONFIG_CPU_SH3) += cache-sh3.o -obj-$(CONFIG_CPU_SH4) += cache-sh4.o ioremap.o sq.o - -USE_STANDARD_AS_RULE := true +obj-$(CONFIG_CPU_SH4) += cache-sh4.o ioremap.o include $(TOPDIR)/Rules.make |
|
From: M. R. B. <mr...@us...> - 2002-10-29 15:20:52
|
Update of /cvsroot/linuxdc/linux-sh-dc/arch/sh
In directory usw-pr-cvs1:/tmp/cvs-serv9028/arch/sh
Modified Files:
config.in
Log Message:
Linux-SH 2.5.44 switchover
Index: config.in
===================================================================
RCS file: /cvsroot/linuxdc/linux-sh-dc/arch/sh/config.in,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -d -r1.5 -r1.6
--- config.in 23 Jan 2002 06:56:48 -0000 1.5
+++ config.in 29 Oct 2002 15:20:19 -0000 1.6
@@ -9,26 +9,16 @@
define_bool CONFIG_UID16 y
define_bool CONFIG_RWSEM_GENERIC_SPINLOCK y
define_bool CONFIG_RWSEM_XCHGADD_ALGORITHM n
+define_bool CONFIG_GENERIC_ISA_DMA y
+define_bool CONFIG_VARIABLE_CLOCK_TICK_RATE y
-mainmenu_option next_comment
-comment 'Code maturity level options'
-bool 'Prompt for development and/or incomplete code/drivers' CONFIG_EXPERIMENTAL
-endmenu
+source init/Config.in
mainmenu_option next_comment
-comment 'Loadable module support'
-bool 'Enable loadable module support' CONFIG_MODULES
-if [ "$CONFIG_MODULES" = "y" ]; then
- bool ' Set version information on all module symbols' CONFIG_MODVERSIONS
- bool ' Kernel module loader' CONFIG_KMOD
-fi
-endmenu
+comment 'System type'
-mainmenu_option next_comment
-comment 'Processor type and features'
choice 'SuperH system type' \
- "Generic CONFIG_SH_GENERIC \
- SolutionEngine CONFIG_SH_SOLUTION_ENGINE \
+ "SolutionEngine CONFIG_SH_SOLUTION_ENGINE \
SolutionEngine7751 CONFIG_SH_7751_SOLUTION_ENGINE \
STB1_Harp CONFIG_SH_STB1_HARP \
STB1_Overdrive CONFIG_SH_STB1_OVERDRIVE \
@@ -43,53 +33,29 @@
BigSur CONFIG_SH_BIGSUR \
SH2000 CONFIG_SH_SH2000 \
ADX CONFIG_SH_ADX \
- BareCPU CONFIG_SH_UNKNOWN" Generic
-
-# The SH7750 RTC module is disabled in the Dreamcast
-if [ "$CONFIG_SH_DREAMCAST" = "y" ]; then
- define_bool CONFIG_SH_RTC n
-else
- define_bool CONFIG_SH_RTC y
-fi
+ BareCPU CONFIG_SH_UNKNOWN" BareCPU
-if [ "$CONFIG_SH_HP620" = "y" -o "$CONFIG_SH_HP680" = "y" -o \
- "$CONFIG_SH_HP690" = "y" ]; then
- define_bool CONFIG_SH_HP600 y
-fi
+# Board-specific config.in's go here - restructure
+# source arch/sh/boards/adx/Config.in
+# source arch/sh/boards/bigsur/Config.in
+# source arch/sh/boards/cat68701/Config.in
+# source arch/sh/boards/cqreek/Config.in
+# source arch/sh/boards/dmida/Config.in
+# source arch/sh/boards/dreamcast/Config.in
+# source arch/sh/boards/ec3104/Config.in
+# source arch/sh/boards/harp/Config.in
+# source arch/sh/boards/hp6xx/hp620/Config.in
+# source arch/sh/boards/hp6xx/hp680/Config.in
+# source arch/sh/boards/hp6xx/hp690/Config.in
+# source arch/sh/boards/overdrive/Config.in
+# source arch/sh/boards/se/770x/Config.in
+# source arch/sh/boards/se/7751/Config.in
+# source arch/sh/boards/sh2000/Config.in
+# source arch/sh/boards/unknown/Config.in
-choice 'Processor type' \
- "SH7707 CONFIG_CPU_SUBTYPE_SH7707 \
- SH7708 CONFIG_CPU_SUBTYPE_SH7708 \
- SH7709 CONFIG_CPU_SUBTYPE_SH7709 \
- SH7750 CONFIG_CPU_SUBTYPE_SH7750 \
- SH7751 CONFIG_CPU_SUBTYPE_SH7751 \
- ST40STB1 CONFIG_CPU_SUBTYPE_ST40STB1" SH7708
-if [ "$CONFIG_CPU_SUBTYPE_SH7707" = "y" ]; then
- define_bool CONFIG_CPU_SH3 y
- define_bool CONFIG_CPU_SH4 n
-fi
-if [ "$CONFIG_CPU_SUBTYPE_SH7708" = "y" ]; then
- define_bool CONFIG_CPU_SH3 y
- define_bool CONFIG_CPU_SH4 n
-fi
-if [ "$CONFIG_CPU_SUBTYPE_SH7709" = "y" ]; then
- define_bool CONFIG_CPU_SH3 y
- define_bool CONFIG_CPU_SH4 n
-fi
-if [ "$CONFIG_CPU_SUBTYPE_SH7750" = "y" ]; then
- define_bool CONFIG_CPU_SH3 n
- define_bool CONFIG_CPU_SH4 y
-fi
-if [ "$CONFIG_CPU_SUBTYPE_SH7751" = "y" ]; then
- define_bool CONFIG_CPU_SH3 n
- define_bool CONFIG_CPU_SH4 y
-fi
-if [ "$CONFIG_CPU_SUBTYPE_ST40STB1" = "y" ]; then
- define_bool CONFIG_CPU_SH3 n
- define_bool CONFIG_CPU_SH4 y
-fi
-bool 'Little Endian' CONFIG_CPU_LITTLE_ENDIAN
# Platform-specific memory start and size definitions
+# XXX: break these out into the board-specific configs above
+if [ "$CONFIG_MEMORY_OVERRIDE" != "y" ]; then
if [ "$CONFIG_SH_SOLUTION_ENGINE" = "y" ]; then
define_hex CONFIG_MEMORY_START 0c000000
define_hex CONFIG_MEMORY_SIZE 02000000
@@ -106,53 +72,26 @@
define_hex CONFIG_MEMORY_SIZE 00400000
define_bool CONFIG_MEMORY_SET y
fi
-if [ "$CONFIG_CPU_SUBTYPE_ST40STB1" = "y" ]; then
- bool 'Memory on LMI' CONFIG_ST40_LMI_MEMORY
- if [ "$CONFIG_ST40_LMI_MEMORY" = "y" ] ; then
- define_hex CONFIG_MEMORY_START 08000000
- define_hex CONFIG_MEMORY_SIZE 00400000
+if [ "$CONFIG_SH_DREAMCAST" = "y" ]; then
+ define_hex CONFIG_MEMORY_START 0c000000
+ define_hex CONFIG_MEMORY_SIZE 01000000
define_bool CONFIG_MEMORY_SET y
- fi
fi
if [ "$CONFIG_SH_ADX" = "y" ]; then
define_hex CONFIG_MEMORY_START 08000000
define_hex CONFIG_MEMORY_SIZE 00400000
define_bool CONFIG_MEMORY_SET y
fi
-if [ "$CONFIG_SH_DREAMCAST" = "y" ]; then
- define_hex CONFIG_MEMORY_START 0c000000
- define_hex CONFIG_MEMORY_SIZE 01000000
- define_bool CONFIG_MEMORY_SET y
fi
# If none of the above have set memory start/size, ask the user.
-if [ "$CONFIG_MEMORY_SET" != "y" ]; then
+bool 'Override default load address and memory size' CONFIG_MEMORY_OVERRIDE
+if [ "$CONFIG_MEMORY_SET" != "y" -o "$CONFIG_MEMORY_OVERRIDE" = "y" ]; then
hex 'Physical memory start address' CONFIG_MEMORY_START 08000000
hex 'Physical memory size' CONFIG_MEMORY_SIZE 00400000
fi
-endmenu
-
-if [ "$CONFIG_SH_HP690" = "y" ]; then
- define_bool CONFIG_DISCONTIGMEM y
-else
- define_bool CONFIG_DISCONTIGMEM n
-fi
-mainmenu_option next_comment
-comment 'General setup'
-
-# Even on SuperH devices which don't have an ISA bus,
-# this variable helps the PCMCIA modules handle
-# IRQ requesting properly -- Greg Banks.
-define_bool CONFIG_ISA y
-define_bool CONFIG_EISA n
-define_bool CONFIG_MCA n
-define_bool CONFIG_SBUS n
-
-bool 'Networking support' CONFIG_NET
-
-if [ "$CONFIG_SH_GENERIC" = "y" -o "$CONFIG_SH_SOLUTION_ENGINE" = "y" -o \
- "$CONFIG_SH_UNKNOWN" = "y" -o "$CONFIG_SH_CAT68701" = "y" -o \
- "$CONFIG_SH_ADX" = "y" ]; then
+if [ "$CONFIG_SH_ADX" = "y" -o "$CONFIG_SH_SOLUTION_ENGINE" = "y" -o \
+ "$CONFIG_SH_UNKNOWN" = "y" -o "$CONFIG_SH_CAT68701" = "y" ]; then
bool 'Compact Flash Enabler support' CONFIG_CF_ENABLER
fi
@@ -168,19 +107,102 @@
fi
fi
-bool 'Hitachi HD64461 companion chip support' CONFIG_HD64461
-if [ "$CONFIG_HD64461" = "y" ]; then
+endmenu
+
+# The SH7750 RTC module is disabled in the Dreamcast
+if [ "$CONFIG_SH_DREAMCAST" = "y" ]; then
+ define_bool CONFIG_SH_RTC n
+ define_bool CONFIG_PCI_AUTO n
+else
+ define_bool CONFIG_SH_RTC y
+fi
+
+if [ "$CONFIG_SH_HP620" = "y" -o "$CONFIG_SH_HP680" = "y" -o \
+ "$CONFIG_SH_HP690" = "y" ]; then
+ define_bool CONFIG_SH_HP600 y
+fi
+
+if [ "$CONFIG_SH_HP690" = "y" ]; then
+ define_bool CONFIG_DISCONTIGMEM y
+else
+ define_bool CONFIG_DISCONTIGMEM n
+fi
+
+mainmenu_option next_comment
+comment 'Processor type and features'
+
+choice 'Processor type' \
+ "SH7707 CONFIG_CPU_SUBTYPE_SH7707 \
+ SH7708 CONFIG_CPU_SUBTYPE_SH7708 \
+ SH7709 CONFIG_CPU_SUBTYPE_SH7709 \
+ SH7750 CONFIG_CPU_SUBTYPE_SH7750 \
+ SH7751 CONFIG_CPU_SUBTYPE_SH7751 \
+ ST40STB1 CONFIG_CPU_SUBTYPE_ST40STB1" SH7708
+
+if [ "$CONFIG_CPU_SUBTYPE_SH7707" = "y" -o "$CONFIG_CPU_SUBTYPE_SH7708" = "y" -o \
+ "$CONFIG_CPU_SUBTYPE_SH7709" = "y" ]; then
+ define_bool CONFIG_CPU_SH3 y
+ define_bool CONFIG_CPU_SH4 n
+else
+ if [ "$CONFIG_CPU_SUBTYPE_SH7750" = "y" -o "$CONFIG_CPU_SUBTYPE_SH7751" = "y" -o \
+ "$CONFIG_CPU_SUBTYPE_ST40STB1" = "y" ]; then
+ define_bool CONFIG_CPU_SH3 n
+ define_bool CONFIG_CPU_SH4 y
+ fi
+fi
+
+# XXX: needs to lose subtype for system type
+if [ "$CONFIG_CPU_SUBTYPE_ST40STB1" = "y" ]; then
+ bool 'Memory on LMI' CONFIG_ST40_LMI_MEMORY
+ if [ "$CONFIG_ST40_LMI_MEMORY" = "y" ] ; then
+ define_hex CONFIG_MEMORY_START 08000000
+ define_hex CONFIG_MEMORY_SIZE 00400000
+ define_bool CONFIG_MEMORY_SET y
+ fi
+fi
+
+# We can also split out companion chip Config.in's
+# source arch/sh/cchips/hd6446x/hd64461/Config.in
+# source arch/sh/cchips/hd6446x/hd64465/Config.in
+
+if [ "$CONFIG_CPU_SUBTYPE_SH7709" = "y" ]; then
+ bool 'Hitachi HD64461 companion chip support' CONFIG_HD64461
+ if [ "$CONFIG_HD64461" = "y" ]; then
int 'HD64461 IRQ' CONFIG_HD64461_IRQ 36
bool 'HD64461 PCMCIA enabler' CONFIG_HD64461_ENABLER
+ fi
fi
-bool 'Hitachi HD64465 companion chip support' CONFIG_HD64465
-if [ "$CONFIG_HD64465" = "y" ]; then
+if [ "$CONFIG_CPU_SUBTYPE_SH7750" = "y" ]; then
+ bool 'Hitachi HD64465 companion chip support' CONFIG_HD64465
+ if [ "$CONFIG_HD64465" = "y" ]; then
hex 'HD64465 start address' CONFIG_HD64465_IOBASE b0000000
int 'HD64465 IRQ' CONFIG_HD64465_IRQ 5
+ fi
fi
+bool 'Little Endian' CONFIG_CPU_LITTLE_ENDIAN
+dep_bool 'Preemptible Kernel (EXPERIMENTAL)' CONFIG_PREEMPT $CONFIG_EXPERIMENTAL
+bool 'Wakeup UBC on startup' CONFIG_UBC_WAKEUP
bool 'DMA controller (DMAC) support' CONFIG_SH_DMA
+bool 'Default bootloader kernel arguments' CONFIG_CMDLINE_BOOL
+if [ "$CONFIG_CMDLINE_BOOL" = "y" ] ; then
+ string 'Initial kernel command string' CONFIG_CMDLINE "console=ttySC1,115200"
+fi
+
+endmenu
+
+
+mainmenu_option next_comment
+comment 'Bus options (PCI, PCMCIA, EISA, MCA, ISA)'
+
+# Even on SuperH devices which don't have an ISA bus,
+# this variable helps the PCMCIA modules handle
+# IRQ requesting properly -- Greg Banks.
+define_bool CONFIG_ISA y
+define_bool CONFIG_EISA n
+define_bool CONFIG_MCA n
+define_bool CONFIG_SBUS n
bool 'PCI support' CONFIG_PCI
if [ "$CONFIG_PCI" = "y" ]; then
@@ -194,7 +216,7 @@
if [ "$CONFIG_PCI_GODIRECT" = "y" -o "$CONFIG_PCI_GOANY" = "y" ]; then
define_bool CONFIG_PCI_DIRECT y
fi
- bool 'Cache and PCI noncoherent' CONFIG_SH_PCIDMA_NONCOHERENT n
+ bool 'Cache and PCI noncoherent' CONFIG_SH_PCIDMA_NONCOHERENT
fi
source drivers/pci/Config.in
@@ -203,13 +225,18 @@
if [ "$CONFIG_HOTPLUG" = "y" ] ; then
source drivers/pcmcia/Config.in
+ source drivers/hotplug/Config.in
else
define_bool CONFIG_PCMCIA n
+ define_bool CONFIG_HOTPLUG_PCI n
fi
-bool 'System V IPC' CONFIG_SYSVIPC
-bool 'BSD Process Accounting' CONFIG_BSD_PROCESS_ACCT
-bool 'Sysctl support' CONFIG_SYSCTL
+endmenu
+
+
+mainmenu_option next_comment
+comment 'Executable file formats'
+
if [ "$CONFIG_PROC_FS" = "y" ]; then
choice 'Kernel core (/proc/kcore) format' \
"ELF CONFIG_KCORE_ELF \
@@ -218,46 +245,52 @@
tristate 'Kernel support for ELF binaries' CONFIG_BINFMT_ELF
tristate 'Kernel support for MISC binaries' CONFIG_BINFMT_MISC
-source drivers/parport/Config.in
-
endmenu
source drivers/mtd/Config.in
-source drivers/block/Config.in
-
-source drivers/md/Config.in
+source drivers/parport/Config.in
-if [ "$CONFIG_NET" = "y" ]; then
- source net/Config.in
-fi
+source drivers/block/Config.in
mainmenu_option next_comment
-comment 'ATA/IDE/MFM/RLL support'
+comment 'ATA/ATAPI/MFM/RLL support'
-tristate 'ATA/IDE/MFM/RLL support' CONFIG_IDE
+tristate 'ATA/ATAPI/MFM/RLL support' CONFIG_IDE
if [ "$CONFIG_IDE" != "n" ]; then
source drivers/ide/Config.in
else
- define_bool CONFIG_BLK_DEV_IDE_MODES n
define_bool CONFIG_BLK_DEV_HD n
fi
endmenu
mainmenu_option next_comment
-comment 'SCSI support'
+comment 'SCSI device support'
-tristate 'SCSI support' CONFIG_SCSI
+tristate 'SCSI device support' CONFIG_SCSI
if [ "$CONFIG_SCSI" != "n" ]; then
source drivers/scsi/Config.in
fi
endmenu
+mainmenu_option next_comment
+comment 'Old CD-ROM drivers (not SCSI, not IDE)'
+
+bool 'Support non-SCSI/IDE/ATAPI CDROM drives' CONFIG_CD_NO_IDESCSI
+if [ "$CONFIG_CD_NO_IDESCSI" != "n" ]; then
+ source drivers/cdrom/Config.in
+fi
+endmenu
+
+source drivers/md/Config.in
+
source drivers/ieee1394/Config.in
if [ "$CONFIG_NET" = "y" ]; then
+ source net/Config.in
+
mainmenu_option next_comment
comment 'Network device support'
@@ -271,17 +304,16 @@
endmenu
fi
-mainmenu_option next_comment
-comment 'Old CD-ROM drivers (not SCSI, not IDE)'
+source net/ax25/Config.in
-bool 'Support non-SCSI/IDE/ATAPI CDROM drives' CONFIG_CD_NO_IDESCSI
-if [ "$CONFIG_CD_NO_IDESCSI" != "n" ]; then
- source drivers/cdrom/Config.in
-fi
-endmenu
+source net/irda/Config.in
+
+source drivers/isdn/Config.in
+
+source drivers/telephony/Config.in
#
-# input before char - char/joystick depends on it. As does USB.
+# input - input/joystick depends on it. As does USB.
#
source drivers/input/Config.in
@@ -308,8 +340,7 @@
int 'Maximum number of Unix98 PTYs in use (0-2048)' CONFIG_UNIX98_PTY_COUNT 256
fi
-if [ "$CONFIG_SH_GENERIC" = "y" -o \
- "$CONFIG_SH_CAT68701" = "y" -o \
+if [ "$CONFIG_SH_CAT68701" = "y" -o \
"$CONFIG_SH_STB1_HARP" = "y" -o \
"$CONFIG_SH_STB1_OVERDRIVE" = "y" -o \
"$CONFIG_SH_BIGSUR" = "y" -o \
@@ -324,15 +355,12 @@
if [ "$CONFIG_INPUT" != "n" ]; then
dep_tristate ' Maple Bus keyboard support' CONFIG_MAPLE_KEYBOARD $CONFIG_INPUT
dep_tristate ' Maple Bus mouse support' CONFIG_MAPLE_MOUSE $CONFIG_INPUT
- dep_tristate ' Maple Light Gun support' CONFIG_MAPLE_LIGHTGUN $CONFIG_INPUT
else
comment 'Input core support is required for Maple input peripherals'
fi
endmenu
fi
-source drivers/char/joystick/Config.in
-
if [ "$CONFIG_PARPORT" != "n" ]; then
dep_tristate 'Parallel printer support' CONFIG_PRINTER $CONFIG_PARPORT
if [ "$CONFIG_PRINTER" != "n" ]; then
@@ -347,7 +375,7 @@
bool 'Watchdog Timer Support' CONFIG_WATCHDOG
if [ "$CONFIG_WATCHDOG" != "n" ]; then
bool ' Disable watchdog shutdown on close' CONFIG_WATCHDOG_NOWAYOUT
- dep_tristate ' SH 3/4 Watchdog' CONFIG_SH_WDT $CONFIG_SUPERH
+ tristate ' SH 3/4 Watchdog' CONFIG_SH_WDT
fi
endmenu
@@ -373,16 +401,19 @@
endmenu
fi
-
mainmenu_option next_comment
comment 'Sound'
tristate 'Sound card support' CONFIG_SOUND
if [ "$CONFIG_SOUND" != "n" ]; then
- source drivers/sound/Config.in
+ source sound/Config.in
fi
endmenu
+source drivers/usb/Config.in
+
+source net/bluetooth/Config.in
+
mainmenu_option next_comment
comment 'Kernel hacking'
@@ -392,3 +423,6 @@
bool 'Early printk support' CONFIG_SH_EARLY_PRINTK
fi
endmenu
+
+source security/Config.in
+source lib/Config.in
|
|
From: M. R. B. <mr...@us...> - 2002-10-29 15:20:49
|
Update of /cvsroot/linuxdc/linux-sh-dc In directory usw-pr-cvs1:/tmp/cvs-serv9028 Modified Files: ChangeLog.dc Makefile Log Message: Linux-SH 2.5.44 switchover Index: ChangeLog.dc =================================================================== RCS file: /cvsroot/linuxdc/linux-sh-dc/ChangeLog.dc,v retrieving revision 1.56 retrieving revision 1.57 diff -u -d -r1.56 -r1.57 --- ChangeLog.dc 19 Oct 2002 10:58:37 -0000 1.56 +++ ChangeLog.dc 29 Oct 2002 15:20:16 -0000 1.57 @@ -1,3 +1,21 @@ +2002-10-29 M. R. Brown <mr...@li...> + + Linux-SH 2.5.44 switchover. + + * Documentation/Configure.help, arch/sh/config.in, + arch/sh/kernel/pci-dc.c, arch/sh/kernel/setup_dc.c, + drivers/char/joystick/Config.in, drivers/char/joystick/Makefile, + drivers/char/joystick/maplecontrol.c, + drivers/char/joystick/purupuru.c, include/asm-sh/dc_sysasic.h: Remove. + + * Makefile, arch/sh/config.in, arch/sh/mm/Makefile, + drivers/cdrom/gdrom.c, drivers/char/Makefile, + drivers/char/maple_keyb.c, drivers/char/maplemouse.c, + drivers/maple/Makefile, drivers/maple/maple.c, + drivers/mtd/maps/Config.in, drivers/video/pvr2fb.c, + include/linux/maple.h: Merge in changes from Linux-SH-restructure + 2.5.44, and break everything in the process. + 2002-10-18 Adrian McMenamin <ad...@mc...> * drivers/sound/aica/main.c: Parameterised Index: Makefile =================================================================== RCS file: /cvsroot/linuxdc/linux-sh-dc/Makefile,v retrieving revision 1.2 retrieving revision 1.3 diff -u -d -r1.2 -r1.3 --- Makefile 1 May 2002 16:32:27 -0000 1.2 +++ Makefile 29 Oct 2002 15:20:16 -0000 1.3 @@ -1,29 +1,137 @@ VERSION = 2 -PATCHLEVEL = 4 -SUBLEVEL = 18 +PATCHLEVEL = 5 +SUBLEVEL = 44 EXTRAVERSION = -sh-dc +# *DOCUMENTATION* +# To see a list of typical targets execute "make help" +# More info can be located in ./Documentation/kbuild +# Comments in this file are targeted only to the developer, do not [...1203 lines suppressed...] + +define update-if-changed + if [ -r $@ ] && cmp -s $@ $@.tmp; then \ + echo ' (unchanged)'; \ + rm -f $@.tmp; \ + else \ + echo ' (updated)'; \ + mv -f $@.tmp $@; \ + fi +endef + +# $(call descend,<dir>,<target>) +# Recursively call a sub-make in <dir> with target <target> + +ifeq ($(KBUILD_VERBOSE),1) +descend = echo '$(MAKE) -f $(1)/Makefile $(2)'; +endif +descend += $(MAKE) -f $(1)/Makefile obj=$(1) $(2) + +FORCE: |
|
From: M. R. B. <mr...@us...> - 2002-10-29 15:20:25
|
Update of /cvsroot/linuxdc/linux-sh-dc/include/asm-sh
In directory usw-pr-cvs1:/tmp/cvs-serv9028/include/asm-sh
Modified Files:
ide.h
Removed Files:
dc_sysasic.h
Log Message:
Linux-SH 2.5.44 switchover
Index: ide.h
===================================================================
RCS file: /cvsroot/linuxdc/linux-sh-dc/include/asm-sh/ide.h,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -d -r1.1 -r1.2
--- ide.h 1 May 2002 18:36:23 -0000 1.1
+++ ide.h 29 Oct 2002 15:20:22 -0000 1.2
@@ -17,15 +17,11 @@
#include <linux/config.h>
#include <asm/machvec.h>
-#include <asm/dc_sysasic.h>
-
#ifndef MAX_HWIFS
/* Should never have less than 2, ide-pci.c(ide_match_hwif) requires it */
#define MAX_HWIFS 2
#endif
-#define ide__sti() __sti()
-
static __inline__ int ide_default_irq_hp600(ide_ioreg_t base)
{
switch (base) {
@@ -36,26 +32,11 @@
}
}
-static __inline__ int ide_default_irq_dreamcast(ide_ioreg_t base)
-{
- switch (base) {
- case 0x1f0:
- return HW_EVENT_EXT0;
- case 0x170:
- return HW_EVENT_EXT1;
- default:
- return 0;
- }
-}
-
static __inline__ int ide_default_irq(ide_ioreg_t base)
{
if (MACH_HP600) {
return ide_default_irq_hp600(base);
}
- if (MACH_DREAMCAST) {
- return ide_default_irq_dreamcast(base);
- }
switch (base) {
case 0x01f0: return 14;
case 0x0170: return 15;
@@ -112,7 +93,7 @@
static __inline__ void ide_init_default_hwifs(void)
{
-#ifndef CONFIG_BLK_DEV_IDEPCI
+#ifndef CONFIG_PCI
hw_regs_t hw;
int index;
@@ -121,33 +102,8 @@
hw.irq = ide_default_irq(ide_default_io_base(index));
ide_register_hw(&hw, NULL);
}
-#endif /* CONFIG_BLK_DEV_IDEPCI */
+#endif /* CONFIG_PCI */
}
-
-typedef union {
- unsigned all : 8; /* all of the bits together */
- struct {
- unsigned head : 4; /* always zeros here */
- unsigned unit : 1; /* drive select number, 0 or 1 */
- unsigned bit5 : 1; /* always 1 */
- unsigned lba : 1; /* using LBA instead of CHS */
- unsigned bit7 : 1; /* always 1 */
- } b;
- } select_t;
-
-#define ide_request_irq(irq,hand,flg,dev,id) request_irq((irq),(hand),(flg),(dev),(id))
-#define ide_free_irq(irq,dev_id) free_irq((irq), (dev_id))
-#define ide_check_region(from,extent) check_region((from), (extent))
-#define ide_request_region(from,extent,name) request_region((from), (extent), (name))
-#define ide_release_region(from,extent) release_region((from), (extent))
-
-/*
- * The following are not needed for the non-m68k ports
- */
-#define ide_ack_intr(hwif) (1)
-#define ide_fix_driveid(id) do {} while (0)
-#define ide_release_lock(lock) do {} while (0)
-#define ide_get_lock(lock, hdlr, data) do {} while (0)
#endif /* __KERNEL__ */
--- dc_sysasic.h DELETED ---
|
|
From: M. R. B. <mr...@us...> - 2002-10-29 15:20:25
|
Update of /cvsroot/linuxdc/linux-sh-dc/include/linux
In directory usw-pr-cvs1:/tmp/cvs-serv9028/include/linux
Modified Files:
maple.h
Log Message:
Linux-SH 2.5.44 switchover
Index: maple.h
===================================================================
RCS file: /cvsroot/linuxdc/linux-sh-dc/include/linux/maple.h,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -d -r1.2 -r1.3
--- maple.h 23 Jan 2002 06:56:48 -0000 1.2
+++ maple.h 29 Oct 2002 15:20:22 -0000 1.3
@@ -64,6 +64,7 @@
#define MAPLE_FUNC_PURUPURU 0x100
#define MAPLE_FUNC_MOUSE 0x200
+
struct maple_devinfo {
unsigned long function; /* big endian! */
unsigned long function_data[3]; /* big endian! */
@@ -79,81 +80,48 @@
struct maple_driver;
struct maple_device;
-
-#define MAPLEQ_LENGTH_GUN (1<<9)
-
struct mapleq {
struct list_head list;
- void *mq_privdata;
- void *sendbuf;
- char *recvbuf; /* points to ->buf, but 32-byte aligned */
-
- unsigned char port, unit;
- unsigned char command;
- unsigned char done;
- int length;
-
- void (*callback)(struct mapleq *mq);
+ struct maple_device *dev;
+ void *sendbuf, *recvbuf;
+ unsigned char command, length;
unsigned char buf[1024+32];
};
struct maple_device {
- unsigned char port;
- unsigned char unit;
- short lock;
-
- unsigned long function; /* Little endian */
+ struct list_head list;
+ struct maple_driver *driver;
+ struct mapleq *mq;
+ void *private_data;
+ void (*callback)(struct mapleq *mq);
+ unsigned long when, interval, function;
+ int event;
struct maple_devinfo devinfo;
-
+ unsigned char port, unit;
char product_name[32];
char product_license[64];
};
-/* Max devices per port */
-#define MAPLE_MAX_UNITS 6
-
-struct maple_port {
- unsigned char port;
- unsigned char known_units; /* connected units */
- unsigned char units; /* units to connect/disconnect */
- void (*gunmode)(void *,int,int);
- void *gunmode_data;
- struct maple_device *dev[MAPLE_MAX_UNITS];
-};
-
-struct maple_driver_data {
- struct list_head list;
- struct maple_driver *driver;
- struct maple_device *dev;
- void *private_data;
- unsigned long function_data;
- struct mapleq mq;
-};
struct maple_driver {
struct list_head list;
- unsigned long function; /* One or more bits */
+ unsigned long function;
const char *name;
-
- void (*vblank)(struct maple_driver_data *dev);
- void (*reply)(struct maple_driver_data *dev);
- int (*connect)(struct maple_driver_data *dev);
- void (*disconnect)(struct maple_driver_data *dev);
+ int (*connect)(struct maple_device *dev);
+ void (*disconnect)(struct maple_device *dev);
};
-/* Prototypes begin here */
-void maple_send(void);
int maple_add_packet(struct mapleq *mq);
int maple_del_packet(struct mapleq *mq);
+
void maple_register_driver(struct maple_driver *driver);
void maple_unregister_driver(struct maple_driver *driver);
-void maple_getcond_vblank_callback(struct maple_driver_data *data);
-void maple_set_gunmode(int, void (*)(void *,int,int), void *);
-void maple_init_mq(struct mapleq *mq);
-/* Prototypes end here */
+void maple_getcond_callback(struct maple_device *dev,
+ void (*callback)(struct mapleq *mq),
+ unsigned long interval, unsigned long function);
/*
* Local variables:
|
|
From: M. R. B. <mr...@us...> - 2002-10-29 15:20:24
|
Update of /cvsroot/linuxdc/linux-sh-dc/drivers/video In directory usw-pr-cvs1:/tmp/cvs-serv9028/drivers/video Modified Files: pvr2fb.c Log Message: Linux-SH 2.5.44 switchover Index: pvr2fb.c =================================================================== RCS file: /cvsroot/linuxdc/linux-sh-dc/drivers/video/pvr2fb.c,v retrieving revision 1.6 retrieving revision 1.7 diff -u -d -r1.6 -r1.7 --- pvr2fb.c 23 Jan 2002 06:56:48 -0000 1.6 +++ pvr2fb.c 29 Oct 2002 15:20:21 -0000 1.7 @@ -4,7 +4,7 @@ * Dreamcast. * * Copyright (c) 2001 M. R. Brown <mr...@0x...> - * Copyright (c) 2001 Paul Mundt <le...@ch...> + * Copyright (c) 2001, 2002 Paul Mundt <le...@li...> * * This file is part of the LinuxDC project (linuxdc.sourceforge.net). * @@ -12,14 +12,15 @@ /* * This driver is mostly based on the excellent amifb and vfb sources. It uses - * an odd scheme for converting hardware values to/from framebuffer values, here are - * some hacked-up formulas: + * an odd scheme for converting hardware values to/from framebuffer values, + * here are some hacked-up formulas: * - * The Dreamcast has screen offsets from each side of it's four borders and the start - * offsets of the display window. I used these values to calculate 'pseudo' values - * (think of them as placeholders) for the fb video mode, so that when it came time - * to convert these values back into their hardware values, I could just add mode- - * specific offsets to get the correct mode settings: + * The Dreamcast has screen offsets from each side of it's four borders and + * the start offsets of the display window. I used these values to calculate + * 'pseudo' values (think of them as placeholders) for the fb video mode, so + * that when it came time to convert these values back into their hardware + * values, I could just add mode- specific offsets to get the correct mode + * settings: * * left_margin = diwstart_h - borderstart_h; * right_margin = borderstop_h - (diwstart_h + xres); @@ -29,9 +30,9 @@ * hsync_len = borderstart_h + (hsync_total - borderstop_h); * vsync_len = borderstart_v + (vsync_total - borderstop_v); * - * Then, when it's time to convert back to hardware settings, the only constants - * are the borderstart_* offsets, all other values are derived from the fb video - * mode: + * Then, when it's time to convert back to hardware settings, the only + * constants are the borderstart_* offsets, all other values are derived from + * the fb video mode: * * // PAL * borderstart_h = 116; @@ -157,10 +158,8 @@ } currentpar; -static int currcon = 0; static int currbpp; -static struct display disp; -static struct fb_info fb_info; +static struct fb_info *fb_info; static int pvr2fb_inverse = 0; static struct { u_short red, green, blue, alpha; } palette[256]; @@ -176,7 +175,29 @@ #endif } fbcon_cmap; -static char pvr2fb_name[16] = "NEC PowerVR2"; +static struct fb_fix_screeninfo pvr2_fix __initdata = { + .id = "NEC PowerVR2", + .type = FB_TYPE_PACKED_PIXELS, + .visual = FB_VISUAL_TRUECOLOR, + .ypanstep = 1, + .ywrapstep = 1, + .accel = FB_ACCEL_NONE, +}; + +static struct fb_var_screeninfo pvr2_var __initdata = { + .xres = 640, + .yres = 480, + .xres_virtual = 640, + .yres_virtual = 480, + .bits_per_pixel =16, + .red = { 11, 5, 0 }, + .green = { 5, 6, 0 }, + .blue = { 0, 5, 0 }, + .activate = FB_ACTIVATE_NOW, + .height = -1, + .width = -1, + .vmode = FB_VMODE_NONINTERLACED, +}; #define VIDEOMEMSIZE (8*1024*1024) static u_long videomemory = 0xa5000000, videomemorysize = VIDEOMEMSIZE; @@ -188,6 +209,9 @@ static int mtrr_handle; #endif +static int nopan = 0; +static int nowrap = 1; + /* * We do all updating, blanking, etc. during the vertical retrace period */ @@ -202,49 +226,13 @@ int pvr2fb_setup(char*); -static int pvr2fb_get_fix(struct fb_fix_screeninfo *fix, int con, - struct fb_info *info); -static int pvr2fb_get_var(struct fb_var_screeninfo *var, int con, - struct fb_info *info); -static int pvr2fb_set_var(struct fb_var_screeninfo *var, int con, - struct fb_info *info); -static int pvr2fb_pan_display(struct fb_var_screeninfo *var, int con, - struct fb_info *info); -static int pvr2fb_get_cmap(struct fb_cmap *cmap, int kspc, int con, - struct fb_info *info); -static int pvr2fb_set_cmap(struct fb_cmap *cmap, int kspc, int con, - struct fb_info *info); - - /* - * Interface to the low level console driver - */ - -static int pvr2fbcon_switch(int con, struct fb_info *info); -static int pvr2fbcon_updatevar(int con, struct fb_info *info); -static void pvr2fbcon_blank(int blank, struct fb_info *info); - - /* - * Internal/hardware-specific routines - */ - -static void do_install_cmap(int con, struct fb_info *info); +static int pvr2fb_setcolreg(u_int regno, u_int red, u_int green, u_int blue, + u_int transp, struct fb_info *info); +static int pvr2fb_blank(int blank, struct fb_info *info); static u_long get_line_length(int xres_virtual, int bpp); static void set_color_bitfields(struct fb_var_screeninfo *var); -static int pvr2_getcolreg(u_int regno, u_int *red, u_int *green, u_int *blue, - u_int *transp, struct fb_info *info); -static int pvr2_setcolreg(u_int regno, u_int red, u_int green, u_int blue, - u_int transp, struct fb_info *info); - -static int pvr2_encode_fix(struct fb_fix_screeninfo *fix, - struct pvr2fb_par *par); -static int pvr2_decode_var(struct fb_var_screeninfo *var, - struct pvr2fb_par *par); -static int pvr2_encode_var(struct fb_var_screeninfo *var, - struct pvr2fb_par *par); -static void pvr2_get_par(struct pvr2fb_par *par); -static void pvr2_set_var(struct fb_var_screeninfo *var); -static void pvr2_pan_var(struct fb_var_screeninfo *var); -static int pvr2_update_par(void); +static int pvr2fb_check_var(struct fb_var_screeninfo *var, struct fb_info *info); +static int pvr2fb_set_par(struct fb_info *info); static void pvr2_update_display(void); static void pvr2_init_display(void); static void pvr2_do_blank(void); @@ -254,17 +242,14 @@ int val, int size); static struct fb_ops pvr2fb_ops = { - owner: THIS_MODULE, - fb_get_fix: pvr2fb_get_fix, - fb_get_var: pvr2fb_get_var, - fb_set_var: pvr2fb_set_var, - fb_get_cmap: pvr2fb_get_cmap, - fb_set_cmap: pvr2fb_set_cmap, - fb_pan_display: pvr2fb_pan_display, + .owner = THIS_MODULE, + .fb_setcolreg = pvr2fb_setcolreg, + .fb_blank = pvr2fb_blank, + .fb_check_var = pvr2fb_check_var, + .fb_set_par = pvr2fb_set_par, }; static struct fb_videomode pvr2_modedb[] __initdata = { - /* * Broadcast video modes (PAL and NTSC). I'm unfamiliar with * PAL-M and PAL-N, but from what I've read both modes parallel PAL and @@ -275,21 +260,16 @@ /* 640x480 @ 60Hz interlaced (NTSC) */ "ntsc_640x480i", 60, 640, 480, TV_CLK, 38, 33, 0, 18, 146, 26, FB_SYNC_BROADCAST, FB_VMODE_INTERLACED | FB_VMODE_YWRAP - }, - - { + }, { /* 640x240 @ 60Hz (NTSC) */ /* XXX: Broken! Don't use... */ "ntsc_640x240", 60, 640, 240, TV_CLK, 38, 33, 0, 0, 146, 22, FB_SYNC_BROADCAST, FB_VMODE_YWRAP - }, - - { + }, { /* 640x480 @ 60hz (VGA) */ "vga_640x480", 60, 640, 480, VGA_CLK, 38, 33, 0, 18, 146, 26, 0, FB_VMODE_YWRAP }, - }; #define NUM_TOTAL_MODES ARRAY_SIZE(pvr2_modedb) @@ -301,236 +281,11 @@ static int defmode = DEFMODE_NTSC; static char *mode_option __initdata = NULL; -/* Get the fixed part of the display */ - -static int pvr2fb_get_fix(struct fb_fix_screeninfo *fix, int con, - struct fb_info *info) -{ - struct pvr2fb_par par; - - if (con == -1) - pvr2_get_par(&par); - else { - int err; - - if ((err = pvr2_decode_var(&fb_display[con].var, &par))) - return err; - } - return pvr2_encode_fix(fix, &par); -} - -/* Get the user-defined part of the display */ - -static int pvr2fb_get_var(struct fb_var_screeninfo *var, int con, - struct fb_info *info) -{ - int err = 0; - - if (con == -1) { - struct pvr2fb_par par; - - pvr2_get_par(&par); - err = pvr2_encode_var(var, &par); - } else - *var = fb_display[con].var; - - return err; -} - -/* Set the user-defined part of the display */ - -static int pvr2fb_set_var(struct fb_var_screeninfo *var, int con, - struct fb_info *info) -{ - int err, activate = var->activate; - int oldxres, oldyres, oldvxres, oldvyres, oldbpp; - struct pvr2fb_par par; - - struct display *display; - if (con >= 0) - display = &fb_display[con]; - else - display = &disp; /* used during initialization */ - - /* - * FB_VMODE_CONUPDATE and FB_VMODE_SMOOTH_XPAN are equal! - * as FB_VMODE_SMOOTH_XPAN is only used internally - */ - - if (var->vmode & FB_VMODE_CONUPDATE) { - var->vmode |= FB_VMODE_YWRAP; - var->xoffset = display->var.xoffset; - var->yoffset = display->var.yoffset; - } - if ((err = pvr2_decode_var(var, &par))) - return err; - pvr2_encode_var(var, &par); - - /* Do memory check and bitfield set here?? */ - - if ((activate & FB_ACTIVATE_MASK) == FB_ACTIVATE_NOW) { - oldxres = display->var.xres; - oldyres = display->var.yres; - oldvxres = display->var.xres_virtual; - oldvyres = display->var.yres_virtual; - oldbpp = display->var.bits_per_pixel; - display->var = *var; - if (oldxres != var->xres || oldyres != var->yres || - oldvxres != var->xres_virtual || oldvyres != var->yres_virtual || - oldbpp != var->bits_per_pixel) { - struct fb_fix_screeninfo fix; - - pvr2_encode_fix(&fix, &par); - display->screen_base = (char *)fix.smem_start; - display->scrollmode = SCROLL_YREDRAW; - display->visual = fix.visual; - display->type = fix.type; - display->type_aux = fix.type_aux; - display->ypanstep = fix.ypanstep; - display->ywrapstep = fix.ywrapstep; - display->line_length = fix.line_length; - display->can_soft_blank = 1; - display->inverse = pvr2fb_inverse; - switch (var->bits_per_pixel) { -#ifdef FBCON_HAS_CFB16 - case 16: - display->dispsw = &fbcon_cfb16; - display->dispsw_data = fbcon_cmap.cfb16; - break; -#endif -#ifdef FBCON_HAS_CFB24 - case 24: - display->dispsw = &fbcon_cfb24; - display->dispsw_data = fbcon_cmap.cfb24; - break; -#endif -#ifdef FBCON_HAS_CFB32 - case 32: - display->dispsw = &fbcon_cfb32; - display->dispsw_data = fbcon_cmap.cfb32; - break; -#endif - default: - display->dispsw = &fbcon_dummy; - break; - } - if (fb_info.changevar) - (*fb_info.changevar)(con); - } - if (oldbpp != var->bits_per_pixel) { - if ((err = fb_alloc_cmap(&display->cmap, 0, 0))) - return err; - do_install_cmap(con, info); - } - if (con == currcon) - pvr2_set_var(&display->var); - } - - return 0; -} - -/* - * Pan or wrap the display. - * This call looks only at xoffset, yoffset and the FB_VMODE_YRAP flag - */ - -static int pvr2fb_pan_display(struct fb_var_screeninfo *var, int con, - struct fb_info *info) -{ - if (var->vmode & FB_VMODE_YWRAP) { - if (var->yoffset<0 || var->yoffset >= - fb_display[con].var.yres_virtual || var->xoffset) - return -EINVAL; - } else { - if (var->xoffset+fb_display[con].var.xres > - fb_display[con].var.xres_virtual || - var->yoffset+fb_display[con].var.yres > - fb_display[con].var.yres_virtual) - return -EINVAL; - } - if (con == currcon) - pvr2_pan_var(var); - fb_display[con].var.xoffset = var->xoffset; - fb_display[con].var.yoffset = var->yoffset; - if (var->vmode & FB_VMODE_YWRAP) - fb_display[con].var.vmode |= FB_VMODE_YWRAP; - else - fb_display[con].var.vmode &= ~FB_VMODE_YWRAP; - - return 0; -} - -/* Get the colormap */ - -static int pvr2fb_get_cmap(struct fb_cmap *cmap, int kspc, int con, - struct fb_info *info) -{ - if (con == currcon) /* current console? */ - return fb_get_cmap(cmap, kspc, pvr2_getcolreg, info); - else if (fb_display[con].cmap.len) /* non default colormap? */ - fb_copy_cmap(&fb_display[con].cmap, cmap, kspc ? 0 : 2); - else - fb_copy_cmap(fb_default_cmap(1<<fb_display[con].var.bits_per_pixel), - cmap, kspc ? 0 : 2); - return 0; -} - -/* Set the colormap */ - -static int pvr2fb_set_cmap(struct fb_cmap *cmap, int kspc, int con, - struct fb_info *info) -{ - int err; - - if (!fb_display[con].cmap.len) { /* no colormap allocated? */ - if ((err = fb_alloc_cmap(&fb_display[con].cmap, - 1<<fb_display[con].var.bits_per_pixel, - 0))) - return err; - } - if (con == currcon) /* current console? */ - return fb_set_cmap(cmap, kspc, pvr2_setcolreg, info); - else - fb_copy_cmap(cmap, &fb_display[con].cmap, kspc ? 0 : 1); - - return 0; -} - -static int pvr2fbcon_switch(int con, struct fb_info *info) -{ - /* Do we have to save the colormap? */ - if (fb_display[currcon].cmap.len) - fb_get_cmap(&fb_display[currcon].cmap, 1, pvr2_getcolreg, info); - - currcon = con; - pvr2_set_var(&fb_display[con].var); - /* Install new colormap */ - do_install_cmap(con, info); - return 0; -} - -static int pvr2fbcon_updatevar(int con, struct fb_info *info) -{ - pvr2_pan_var(&fb_display[con].var); - return 0; -} - -static void pvr2fbcon_blank(int blank, struct fb_info *info) +static int pvr2fb_blank(int blank, struct fb_info *info) { do_blank = blank ? blank : -1; -} - -/* Setup the colormap */ -static void do_install_cmap(int con, struct fb_info *info) -{ - if (con != currcon) - return; - if (fb_display[con].cmap.len) - fb_set_cmap(&fb_display[con].cmap, 1, pvr2_setcolreg, info); - else - fb_set_cmap(fb_default_cmap(1<<fb_display[con].var.bits_per_pixel), - 1, pvr2_setcolreg, info); + return 0; } static inline u_long get_line_length(int xres_virtual, int bpp) @@ -562,20 +317,7 @@ } } -static int pvr2_getcolreg(u_int regno, u_int *red, u_int *green, u_int *blue, - u_int *transp, struct fb_info *info) -{ - if (regno > 255) - return 1; - - *red = palette[regno].red; - *green = palette[regno].green; - *blue = palette[regno].blue; - *transp = 0; - return 0; -} - -static int pvr2_setcolreg(u_int regno, u_int red, u_int green, u_int blue, +static int pvr2fb_setcolreg(u_int regno, u_int red, u_int green, u_int blue, u_int transp, struct fb_info *info) { if (regno > 255) @@ -615,39 +357,10 @@ return 0; } - -static int pvr2_encode_fix(struct fb_fix_screeninfo *fix, - struct pvr2fb_par *par) -{ - memset(fix, 0, sizeof(struct fb_fix_screeninfo)); - strcpy(fix->id, pvr2fb_name); - fix->smem_start = videomemory; - fix->smem_len = videomemorysize; - fix->type = FB_TYPE_PACKED_PIXELS; - fix->type_aux = 0; - fix->visual = FB_VISUAL_TRUECOLOR; - - if (par->vmode & FB_VMODE_YWRAP) { - fix->ywrapstep = 1; - fix->xpanstep = fix->ypanstep = 0; - } else { - fix->ywrapstep = 0; - fix->xpanstep = 1; - fix->ypanstep = 1; - } - fix->line_length = par->next_line; - - return 0; -} - -/* - * Create a hardware video mode using the framebuffer values. If a value needs - * to be clipped or constrained it's done here. This routine needs a bit more - * work to make sure we're doing the right tests at the right time. - */ -static int pvr2_decode_var(struct fb_var_screeninfo *var, - struct pvr2fb_par *par) +static int pvr2fb_set_par(struct fb_info *info) { + struct pvr2fb_par *par = (struct pvr2fb_par *)info->par; + struct fb_var_screeninfo *var = &info->var; u_long line_length; u_short vtotal; @@ -677,10 +390,10 @@ /* * XXX: It's possible that a user could use a VGA box, change the cable - * type in hardware (i.e. switch from VGA<->composite), then change modes - * (i.e. switching to another VT). If that happens we should automagically - * change the output format to cope, but currently I don't have a VGA box - * to make sure this works properly. + * type in hardware (i.e. switch from VGA<->composite), then change + * modes (i.e. switching to another VT). If that happens we should + * automagically change the output format to cope, but currently I + * don't have a VGA box to make sure this works properly. */ cable_type = pvr2_init_cable(); if (cable_type == CT_VGA && video_output != VO_VGA) @@ -728,8 +441,8 @@ /* VGA mode */ /* XXX: What else needs to be checked? */ /* - * XXX: We have a little freedom in VGA modes, what ranges should - * be here (i.e. hsync/vsync totals, etc.)? + * XXX: We have a little freedom in VGA modes, what ranges + * should be here (i.e. hsync/vsync totals, etc.)? */ par->borderstart_h = 126; par->borderstart_v = 40; @@ -742,9 +455,9 @@ var->vsync_len; par->diwstart_h = par->borderstart_h + var->left_margin; par->diwstart_v = par->borderstart_v + var->upper_margin; + if (!par->is_interlaced) par->borderstop_v /= 2; - if (par->xres < 640) par->is_lowres = 1; @@ -775,10 +488,9 @@ return 0; } -static int pvr2_encode_var(struct fb_var_screeninfo *var, - struct pvr2fb_par *par) +static int pvr2fb_check_var(struct fb_var_screeninfo *var, struct fb_info *info) { - memset(var, 0, sizeof(struct fb_var_screeninfo)); + struct pvr2fb_par *par = (struct pvr2fb_par *)info->par; var->xres = par->xres; var->yres = par->yres; @@ -791,8 +503,6 @@ set_color_bitfields(var); var->activate = FB_ACTIVATE_NOW; - var->height = -1; - var->width = -1; var->pixclock = par->pixclock; @@ -819,56 +529,6 @@ return 0; } -static void pvr2_get_par(struct pvr2fb_par *par) -{ - *par = currentpar; -} - -/* Setup the new videomode in hardware */ - -static void pvr2_set_var(struct fb_var_screeninfo *var) -{ - do_vmode_pan = 0; - do_vmode_full = 0; - pvr2_decode_var(var, ¤tpar); - - do_vmode_full = 1; -} - -/* - * Pan or wrap the display - * This call looks only at xoffset, yoffset and the FB_VMODE_YWRAP flag in `var'. - */ -static void pvr2_pan_var(struct fb_var_screeninfo *var) -{ - struct pvr2fb_par *par = ¤tpar; - - par->xoffset = var->xoffset; - par->yoffset = var->yoffset; - if (var->vmode & FB_VMODE_YWRAP) - par->vmode |= FB_VMODE_YWRAP; - else - par->vmode &= ~FB_VMODE_YWRAP; - - do_vmode_pan = 0; - pvr2_update_par(); - do_vmode_pan = 1; -} - -static int pvr2_update_par(void) -{ - struct pvr2fb_par *par = ¤tpar; - u_long move; - - move = get_line_length(par->xoffset, par->bpp); - if (par->yoffset) { - par->disp_start += (par->next_line * par->yoffset) + move; - } else - par->disp_start += move; - - return 0; -} - static void pvr2_update_display(void) { struct pvr2fb_par *par = ¤tpar; @@ -933,7 +593,6 @@ /* video enable, color sync, interlace, * hsync and vsync polarity (currently unused) */ ctrl_outl(0x100 | ((par->is_interlaced /*|4*/) << 4), DISP_SYNCCONF); - } /* Simulate blanking by making the border cover the entire screen */ @@ -957,21 +616,16 @@ { if (do_vmode_pan || do_vmode_full) pvr2_update_display(); - if (do_vmode_full) pvr2_init_display(); - if (do_vmode_pan) do_vmode_pan = 0; - + if (do_vmode_full) + do_vmode_full = 0; if (do_blank) { pvr2_do_blank(); do_blank = 0; } - - if (do_vmode_full) { - do_vmode_full = 0; - } } /* @@ -1010,50 +664,88 @@ if (!MACH_DREAMCAST) return -ENXIO; + fb_info = kmalloc(sizeof(struct fb_info) + sizeof(struct display) + + sizeof(u32) * 16, GFP_KERNEL); + + if (!fb_info) { + printk(KERN_ERR "Failed to allocate memory for fb_info\n"); + return -ENOMEM; + } + + memset(fb_info, 0, sizeof(fb_info) + sizeof(struct display) + sizeof(u32) * 16); + /* Make a guess at the monitor based on the attached cable */ if (pvr2_init_cable() == CT_VGA) { - fb_info.monspecs.hfmin = 30000; - fb_info.monspecs.hfmax = 70000; - fb_info.monspecs.vfmin = 60; - fb_info.monspecs.vfmax = 60; - } - else { /* Not VGA, using a TV (taken from acornfb) */ - fb_info.monspecs.hfmin = 15469; - fb_info.monspecs.hfmax = 15781; - fb_info.monspecs.vfmin = 49; - fb_info.monspecs.vfmax = 51; + fb_info->monspecs.hfmin = 30000; + fb_info->monspecs.hfmax = 70000; + fb_info->monspecs.vfmin = 60; + fb_info->monspecs.vfmax = 60; + } else { + /* Not VGA, using a TV (taken from acornfb) */ + fb_info->monspecs.hfmin = 15469; + fb_info->monspecs.hfmax = 15781; + fb_info->monspecs.vfmin = 49; + fb_info->monspecs.vfmax = 51; } - /* XXX: This needs to pull default video output via BIOS or other means */ + /* + * XXX: This needs to pull default video output via BIOS or other means + */ if (video_output < 0) { - if (cable_type == CT_VGA) + if (cable_type == CT_VGA) { video_output = VO_VGA; - else + } else { video_output = VO_NTSC; } + } + + pvr2_fix.smem_start = videomemory; + pvr2_fix.smem_len = videomemorysize; + + fb_info->screen_base = ioremap_nocache(pvr2_fix.smem_start, + pvr2_fix.smem_len); + + if (!fb_info->screen_base) { + printk("Failed to remap MMIO space\n"); + kfree(fb_info); + return -ENXIO; + } + + memset_io((unsigned long)fb_info->screen_base, 0, pvr2_fix.smem_len); + + pvr2_fix.ypanstep = nopan ? 0 : 1; + pvr2_fix.ywrapstep = nowrap ? 0 : 1; + + strcpy(fb_info->modename, fb_info->fix.id); + + fb_info->node = NODEV; + fb_info->fbops = &pvr2fb_ops; + fb_info->fix = pvr2_fix; + fb_info->par = ¤tpar; + fb_info->disp = (struct display *)(fb_info + 1); + fb_info->pseudo_palette = (void *)(fb_info->disp + 1); + fb_info->flags = FBINFO_FLAG_DEFAULT; + + fb_info->currcon = -1; + fb_info->switch_con = gen_switch; + fb_info->updatevar = gen_update_var; - strcpy(fb_info.modename, pvr2fb_name); - fb_info.changevar = NULL; - fb_info.node = -1; - fb_info.fbops = &pvr2fb_ops; - fb_info.disp = &disp; - fb_info.switch_con = &pvr2fbcon_switch; - fb_info.updatevar = &pvr2fbcon_updatevar; - fb_info.blank = &pvr2fbcon_blank; - fb_info.flags = FBINFO_FLAG_DEFAULT; memset(&var, 0, sizeof(var)); if (video_output == VO_VGA) defmode = DEFMODE_VGA; - if (!fb_find_mode(&var, &fb_info, mode_option, pvr2_modedb, - NUM_TOTAL_MODES, &pvr2_modedb[defmode], 16)) { - return -EINVAL; - } + if (!mode_option) + mode_option = "640x480@60"; - if (request_irq(HW_EVENT_VSYNC, pvr2fb_interrupt, SA_SHIRQ, + if (!fb_find_mode(&fb_info->var, fb_info, mode_option, pvr2_modedb, + NUM_TOTAL_MODES, &pvr2_modedb[defmode], 16)) + fb_info->var = pvr2_var; + + if (request_irq(HW_EVENT_VSYNC, pvr2fb_interrupt, 0, "pvr2 VBL handler", ¤tpar)) { DPRINTK("couldn't register VBL int\n"); + kfree(fb_info); return -EBUSY; } @@ -1064,18 +756,20 @@ } #endif - pvr2fb_set_var(&var, -1, &fb_info); + gen_set_var(&fb_info->var, -1, fb_info); - if (register_framebuffer(&fb_info) < 0) + if (register_framebuffer(fb_info) < 0) { + kfree(fb_info); return -EINVAL; + } modememused = get_line_length(var.xres_virtual, var.bits_per_pixel); modememused *= var.yres_virtual; printk("fb%d: %s frame buffer device, using %ldk/%ldk of video memory\n", - GET_FB_IDX(fb_info.node), fb_info.modename, modememused>>10, + GET_FB_IDX(fb_info->node), fb_info->modename, modememused>>10, videomemorysize>>10); printk("fb%d: Mode %dx%d-%d pitch = %ld cable: %s video output: %s\n", - GET_FB_IDX(fb_info.node), var.xres, var.yres, var.bits_per_pixel, + GET_FB_IDX(fb_info->node), var.xres, var.yres, var.bits_per_pixel, get_line_length(var.xres, var.bits_per_pixel), (char *)pvr2_get_param(cables, NULL, cable_type, 3), (char *)pvr2_get_param(outputs, NULL, video_output, 3)); @@ -1091,7 +785,8 @@ printk("pvr2fb: MTRR turned off\n"); } #endif - unregister_framebuffer(&fb_info); + unregister_framebuffer(fb_info); + kfree(fb_info); } static int __init pvr2_get_param(const struct pvr2_params *p, const char *s, @@ -1115,7 +810,6 @@ * Parse command arguments. Supported arguments are: * inverse Use inverse color maps * nomtrr Disable MTRR usage - * font:<fontname> Specify console font * cable:composite|rgb|vga Override the video cable type * output:NTSC|PAL|VGA Override the video output format * @@ -1130,8 +824,6 @@ char cable_arg[80]; char output_arg[80]; - fb_info.fontname[0] = '\0'; - if (!options || !*options) return 0; @@ -1141,23 +833,25 @@ if (!strcmp(this_opt, "inverse")) { pvr2fb_inverse = 1; fb_invert_cmaps(); - } else if (!strncmp(this_opt, "font:", 5)) - strcpy(fb_info.fontname, this_opt + 5); - else if (!strncmp(this_opt, "cable:", 6)) + } else if (!strncmp(this_opt, "cable:", 6)) { strcpy(cable_arg, this_opt + 6); - else if (!strncmp(this_opt, "output:", 7)) + } else if (!strncmp(this_opt, "output:", 7)) { strcpy(output_arg, this_opt + 7); + } else if (!strncmp(this_opt, "nopan", 5)) { + nopan = 1; + } else if (!strncmp(this_opt, "nowrap", 6)) { + nowrap = 1; #ifdef CONFIG_MTRR - else if (!strncmp(this_opt, "nomtrr", 6)) + } else if (!strncmp(this_opt, "nomtrr", 6)) { enable_mtrr = 0; #endif - else + } else { mode_option = this_opt; } + } if (*cable_arg) cable_type = pvr2_get_param(cables, cable_arg, 0, 3); - if (*output_arg) video_output = pvr2_get_param(outputs, output_arg, 0, 3); |
|
From: M. R. B. <mr...@us...> - 2002-10-29 15:20:24
|
Update of /cvsroot/linuxdc/linux-sh-dc/drivers/mtd/maps
In directory usw-pr-cvs1:/tmp/cvs-serv9028/drivers/mtd/maps
Modified Files:
Config.in
Log Message:
Linux-SH 2.5.44 switchover
Index: Config.in
===================================================================
RCS file: /cvsroot/linuxdc/linux-sh-dc/drivers/mtd/maps/Config.in,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -d -r1.3 -r1.4
--- Config.in 17 Dec 2001 04:43:48 -0000 1.3
+++ Config.in 29 Oct 2002 15:20:21 -0000 1.4
@@ -14,7 +14,7 @@
int ' Bus width in octets' CONFIG_MTD_PHYSMAP_BUSWIDTH 2
fi
-if [ "$CONFIG_SPARC" = "y" -o "$CONFIG_SPARC64" = "y" ]; then
+if [ "$CONFIG_SPARC32" = "y" -o "$CONFIG_SPARC64" = "y" ]; then
dep_tristate ' Sun Microsystems userflash support' CONFIG_MTD_SUN_UFLASH $CONFIG_MTD_CFI
fi
@@ -27,7 +27,8 @@
dep_tristate ' JEDEC Flash device mapped on Mixcom piggyback card' CONFIG_MTD_MIXMEM $CONFIG_MTD_JEDEC
dep_tristate ' JEDEC Flash device mapped on Octagon 5066 SBC' CONFIG_MTD_OCTAGON $CONFIG_MTD_JEDEC
dep_tristate ' JEDEC Flash device mapped on Tempustech VMAX SBC301' CONFIG_MTD_VMAX $CONFIG_MTD_JEDEC
- dep_tristate ' BIOS flash chip on Intel L440GX boards' CONFIG_MTD_L440GX $CONFIG_I386 $CONFIG_MTD_JEDEC
+ dep_tristate ' Flash device mapped with DOCCS on NatSemi SCx200' CONFIG_MTD_SCx200_DOCFLASH $CONFIG_MTD_CFI
+ dep_tristate ' BIOS flash chip on Intel L440GX boards' CONFIG_MTD_L440GX $CONFIG_MTD_JEDEC
fi
if [ "$CONFIG_PPC" = "y" ]; then
@@ -53,7 +54,6 @@
if [ "$CONFIG_MTD_SOLUTIONENGINE" != "n" ]; then
hex ' Default reserved Flash size' CONFIG_MTD_SUPERH_RESERVE 0x00010000
fi
- dep_tristate ' Flash device mapping on Sega Dreamcast VMU' CONFIG_MTD_VMU $CONFIG_SH_DREAMCAST
fi
if [ "$CONFIG_ARM" = "y" ]; then
@@ -61,8 +61,18 @@
dep_tristate ' CFI Flash device mapped on ARM Integrator/P720T' CONFIG_MTD_ARM_INTEGRATOR $CONFIG_MTD_CFI
dep_tristate ' Cirrus CDB89712 evaluation board mappings' CONFIG_MTD_CDB89712 $CONFIG_MTD_CFI $CONFIG_ARCH_CDB89712
dep_tristate ' CFI Flash device mapped on StrongARM SA11x0' CONFIG_MTD_SA1100 $CONFIG_MTD_CFI $CONFIG_ARCH_SA1100 $CONFIG_MTD_PARTITIONS
- dep_tristate ' CFI Flash device mapped on DC21285 Footbridge' CONFIG_MTD_DC21285 $CONFIG_MTD_CFI $CONFIG_ARCH_FOOTBRIDGE $CONFIG_MTD_PARTITIONS
+ dep_tristate ' CFI Flash device mapped on DC21285 Footbridge' CONFIG_MTD_DC21285 $CONFIG_MTD_CFI $CONFIG_ARCH_FOOTBRIDGE
dep_tristate ' CFI Flash device mapped on the XScale IQ80310 board' CONFIG_MTD_IQ80310 $CONFIG_MTD_CFI $CONFIG_ARCH_IQ80310
+ dep_tristate ' CFI Flash device mapped on Epxa10db' CONFIG_MTD_EPXA10DB $CONFIG_MTD_CFI $CONFIG_MTD_PARTITIONS $CONFIG_ARCH_CAMELOT
+ dep_tristate ' CFI Flash device mapped on the FortuNet board' CONFIG_MTD_FORTUNET $CONFIG_MTD_CFI $CONFIG_MTD_PARTITIONS $CONFIG_SA1100_FORTUNET
+ dep_tristate ' NV-RAM mapping AUTCPU12 board' CONFIG_MTD_AUTCPU12 $CONFIG_ARCH_AUTCPU12
+ dep_tristate ' CFI Flash device mapped on EDB7312' CONFIG_MTD_EDB7312 $CONFIG_MTD_CFI
+ dep_tristate ' JEDEC Flash device mapped on impA7' CONFIG_MTD_IMPA7 $CONFIG_MTD_JEDECPROBE
+ dep_tristate ' JEDEC Flash device mapped on Ceiva/Polaroid PhotoMax Digital Picture Frame' CONFIG_MTD_CEIVA $CONFIG_MTD_JEDECPROBE $CONFIG_ARCH_CEIVA
fi
+
+# This needs CFI or JEDEC, depending on the cards found.
+dep_tristate ' PCI MTD driver' CONFIG_MTD_PCI $CONFIG_MTD $CONFIG_PCI
+dep_tristate ' PCMCIA MTD driver' CONFIG_MTD_PCMCIA $CONFIG_MTD $CONFIG_PCMCIA
endmenu
|