* au88x0 - Replace spdif frequency control by IEC958 control
@ 2005-02-21 7:40 Raymond
0 siblings, 0 replies; 4+ messages in thread
From: Raymond @ 2005-02-21 7:40 UTC (permalink / raw)
To: openvortex-dev; +Cc: alsa-devel
[-- Attachment #1: Type: text/plain, Size: 1746 bytes --]
This patch only change the existing SPDIF Frequency(32000,44100,48000)
control to the IEC958 control. It means that you will have to use
"iecset rate" instead of alsamixer to change the SPDIF frequency.
1) What is the difference between Consumer mode and Professional mode ?
2) What change will be needed in order to support the SPDIF IN/OUT of
Turtle Beach Montego II Quadzilla ?
3) Are there any status bit to detect the presence of the add-on SPDIF
daugther card of MX300 and Montego II ?
aplay can be used to play 4-channels wave (e.g. out1lq.wav,out1rq.wav,
out2lq.wav and out2rq.wav from the win9x driver) using the au8830 driver.
4) What change will be needed in /usr/share/cards/AU8830.conf to support
Surround40 ?
The PCI SubSystem Device/Vendor ID of the sound card which can be used
to identify specific sound card such as Dimaond MX300, Turtle Beach
Montego II, SQ2500, ....can be obtained from the memory mapped I/O
address 0x2a804 - au8810/30, 0x13004 - au8820.
5) Can any au8810/au8830 owner verify that EN_CODEC1 should/should not
be used for those au8810/au8830 not using a quad codec ? (e.g Montego II
using STAC9721 stereo codec, SQ1500, Vortex Advantage, ASUS L8400B
notebook au8810 with modem)
#define VORTEX_CODEC_CTRL 0x29184
#define VORTEX_CODEC_EN 0x29190
#define EN_CODEC0 0x00000300
#define EN_AC98 0x00000c00 /* Modem AC98 slots. */
#define EN_CODEC1 0x00003000
#define EN_CODEC (EN_CODEC0 | EN_CODEC1)
There is already a parser to parse the sound font au30gm.arl in the
vortex control panel.
http://savannah.nongnu.org/support/?func=detailitem&item_id=103017
6) What else will be needed for the au88x0 driver to support wavetable
synthesis ?
[-- Attachment #2: au88x0_iec958.patch --]
[-- Type: text/plain, Size: 6200 bytes --]
diff -Naur alsa-driver-1.0.8/alsa-kernel/pci/au88x0_orig/au88x0_pcm.c alsa-driver-1.0.8/alsa-kernel/pci/au88x0/au88x0_pcm.c
--- alsa-driver-1.0.8/alsa-kernel/pci/au88x0_orig/au88x0_pcm.c 2005-01-03 20:08:24.000000000 +0800
+++ alsa-driver-1.0.8/alsa-kernel/pci/au88x0/au88x0_pcm.c 2005-02-19 12:02:11.000000000 +0800
@@ -20,7 +20,7 @@
* Supports ADB and WT DMA. Unfortunately, WT channels do not run yet.
* It remains stuck,and DMA transfers do not happen.
*/
-
+#include <sound/asoundef.h>
#include <sound/driver.h>
#include <linux/time.h>
#include <sound/core.h>
@@ -431,61 +431,100 @@
};
/* SPDIF kcontrol */
-static int
-snd_vortex_spdif_info(snd_kcontrol_t * kcontrol, snd_ctl_elem_info_t * uinfo)
-{
- static char *texts[] = { "32000", "44100", "48000" };
- uinfo->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED;
+static int snd_vortex_spdif_info(snd_kcontrol_t *kcontrol, snd_ctl_elem_info_t * uinfo)
+{
+ uinfo->type = SNDRV_CTL_ELEM_TYPE_IEC958;
uinfo->count = 1;
- uinfo->value.enumerated.items = 3;
- if (uinfo->value.enumerated.item >= uinfo->value.enumerated.items)
- uinfo->value.enumerated.item =
- uinfo->value.enumerated.items - 1;
- strcpy(uinfo->value.enumerated.name,
- texts[uinfo->value.enumerated.item]);
return 0;
}
-static int
-snd_vortex_spdif_get(snd_kcontrol_t * kcontrol, snd_ctl_elem_value_t * ucontrol)
+
+static int snd_vortex_spdif_default_get(snd_kcontrol_t * kcontrol, snd_ctl_elem_value_t * ucontrol)
{
vortex_t *vortex = snd_kcontrol_chip(kcontrol);
+ ucontrol->value.iec958.status[0] = 0x00;
+ ucontrol->value.iec958.status[1] = IEC958_AES1_CON_ORIGINAL|IEC958_AES1_CON_DIGDIGCONV_ID;
+ ucontrol->value.iec958.status[2] = 0x00;
+ switch(vortex->spdif_sr){
+ case 32000: ucontrol->value.iec958.status[3] = IEC958_AES3_CON_FS_32000; break;
+ case 44100: ucontrol->value.iec958.status[3] = IEC958_AES3_CON_FS_44100; break;
+ case 48000: ucontrol->value.iec958.status[3] = IEC958_AES3_CON_FS_48000; break;
+ };
+ return 0;
+}
- if (vortex->spdif_sr == 32000)
- ucontrol->value.enumerated.item[0] = 0;
- if (vortex->spdif_sr == 44100)
- ucontrol->value.enumerated.item[0] = 1;
- if (vortex->spdif_sr == 48000)
- ucontrol->value.enumerated.item[0] = 2;
+static int snd_vortex_spdif_default_put(snd_kcontrol_t * kcontrol, snd_ctl_elem_value_t * ucontrol)
+{
+ vortex_t *vortex = snd_kcontrol_chip(kcontrol);
+ switch(ucontrol->value.iec958.status[3] & IEC958_AES3_CON_FS){
+ case IEC958_AES3_CON_FS_32000: vortex->spdif_sr = 32000; break;
+ case IEC958_AES3_CON_FS_44100: vortex->spdif_sr = 44100; break;
+ case IEC958_AES3_CON_FS_48000: vortex->spdif_sr = 48000; break;
+ };
+ vortex_spdif_init(vortex, vortex->spdif_sr, 1);
return 0;
}
-static int
-snd_vortex_spdif_put(snd_kcontrol_t * kcontrol, snd_ctl_elem_value_t * ucontrol)
+
+static int snd_vortex_spdif_mask_get(snd_kcontrol_t * kcontrol, snd_ctl_elem_value_t * ucontrol)
+{
+ ucontrol->value.iec958.status[0] = 0xff;
+ ucontrol->value.iec958.status[1] = 0xff;
+ ucontrol->value.iec958.status[2] = 0xff;
+ ucontrol->value.iec958.status[3] = IEC958_AES3_CON_FS;
+ return 0;
+}
+
+static int snd_vortex_spdif_get(snd_kcontrol_t * kcontrol, snd_ctl_elem_value_t * ucontrol)
+{
+ vortex_t *vortex = snd_kcontrol_chip(kcontrol);
+ ucontrol->value.iec958.status[0] = 0x00;
+ ucontrol->value.iec958.status[1] = IEC958_AES1_CON_ORIGINAL|IEC958_AES1_CON_DIGDIGCONV_ID;
+ ucontrol->value.iec958.status[2] = 0x00;
+ switch(vortex->spdif_sr){
+ case 32000: ucontrol->value.iec958.status[3] = IEC958_AES3_CON_FS_32000; break;
+ case 44100: ucontrol->value.iec958.status[3] = IEC958_AES3_CON_FS_44100; break;
+ case 48000: ucontrol->value.iec958.status[3] = IEC958_AES3_CON_FS_48000; break;
+ };
+ return 0;
+}
+
+static int snd_vortex_spdif_put(snd_kcontrol_t * kcontrol, snd_ctl_elem_value_t * ucontrol)
{
vortex_t *vortex = snd_kcontrol_chip(kcontrol);
- static unsigned int sr[3] = { 32000, 44100, 48000 };
+ switch(ucontrol->value.iec958.status[3] & IEC958_AES3_CON_FS){
+ case IEC958_AES3_CON_FS_32000: vortex->spdif_sr = 32000; break;
+ case IEC958_AES3_CON_FS_44100: vortex->spdif_sr = 44100; break;
+ case IEC958_AES3_CON_FS_48000: vortex->spdif_sr = 48000; break;
+ };
+ vortex_spdif_init(vortex, vortex->spdif_sr, 1);
+ return 0;
+}
- //printk("vortex: spdif sr = %d\n", ucontrol->value.enumerated.item[0]);
- vortex->spdif_sr = sr[ucontrol->value.enumerated.item[0] % 3];
- vortex_spdif_init(vortex,
- sr[ucontrol->value.enumerated.item[0] % 3], 1);
- return 1;
-}
-static snd_kcontrol_new_t vortex_spdif_kcontrol __devinitdata = {
- .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
- .name = "SPDIF SR",
- .index = 0,
- .access = SNDRV_CTL_ELEM_ACCESS_READWRITE,
- .private_value = 0,
- .info = snd_vortex_spdif_info,
- .get = snd_vortex_spdif_get,
- .put = snd_vortex_spdif_put
+/* spdif controls */
+static snd_kcontrol_new_t snd_vortex_mixer_spdif[] __devinitdata = {
+ {
+ .iface = SNDRV_CTL_ELEM_IFACE_PCM,
+ .name = SNDRV_CTL_NAME_IEC958("",PLAYBACK,DEFAULT),
+ .info = snd_vortex_spdif_info,
+ .get = snd_vortex_spdif_default_get,
+ .put = snd_vortex_spdif_default_put,
+ },
+ {
+ .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
+ .access = SNDRV_CTL_ELEM_ACCESS_READ,
+ .iface = SNDRV_CTL_ELEM_IFACE_PCM,
+ .name = SNDRV_CTL_NAME_IEC958("",PLAYBACK,CON_MASK),
+ .info = snd_vortex_spdif_info,
+ .get = snd_vortex_spdif_mask_get
+ },
};
/* create a pcm device */
static int __devinit snd_vortex_new_pcm(vortex_t * chip, int idx, int nr)
{
snd_pcm_t *pcm;
+ snd_kcontrol_t *kctl;
+ int i;
int err, nr_capt;
if ((chip == 0) || (idx < 0) || (idx > VORTEX_PCM_LAST))
@@ -520,13 +559,14 @@
0x10000, 0x10000);
if (VORTEX_PCM_TYPE(pcm) == VORTEX_PCM_SPDIF) {
- snd_kcontrol_t *kcontrol;
-
- if ((kcontrol =
- snd_ctl_new1(&vortex_spdif_kcontrol, chip)) == NULL)
- return -ENOMEM;
- if ((err = snd_ctl_add(chip->card, kcontrol)) < 0)
- return err;
+ for (i = 0; i < ARRAY_SIZE(snd_vortex_mixer_spdif); i++) {
+ kctl = snd_ctl_new1(&snd_vortex_mixer_spdif[i], chip);
+ if (! kctl)
+ return -ENOMEM;
+// kctl->id.index = index;
+ if ((err = snd_ctl_add(chip->card, kctl)) < 0)
+ return err;
+ }
}
return 0;
}
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: au88x0 - Replace spdif frequency control by IEC958 control
@ 2005-02-23 2:19 Raymond
2005-02-23 11:09 ` Takashi Iwai
0 siblings, 1 reply; 4+ messages in thread
From: Raymond @ 2005-02-23 2:19 UTC (permalink / raw)
To: openvortex-dev; +Cc: alsa-devel
>> 1) What is the difference between Consumer mode and Professional mode ?
> A different set of status bits. See, for example, ALSA"s asoundef.h,
> but it doesn"t have many explanations.
>
> The main difference is that only consumer mode has the copyright bit
> so that devices can automatically disable copying.
The parameter 'spdif_mode' in the routine
vortex_spdif_init(vortex,spdif_sr,spdif_mode) in au88x0_core.c seems to
control AC3 passthrough.
However the two memory mapped I/O VORTEX_SPDIF_CFG0 and
VORTEX_SPDIF_CFG1 seem to be write-only, return zero when read.
The value of memory mapped I/O VORTEX_SPDIF_FLAGS are changing between
00138014 and 00138015
1) Which bit in the IEC958 control is related to AC3 passthrough ?
As vortex_spdif_init() only handle changing SPDIF sample rate.
2) Do the driver need to initialise vortex->spdif_sr to 48000 or just
let alsactl restore the value from /etc/asound.state ?
3) Is it correct to return the following value in
snd_vortex_spdif_mask_get() ?
ucontrol->value.iec958.status[3] = IEC958_AES3_CON_FS;
4) Is it correct to return the following value in
snd_vortex_spdif_default_get() ?
ucontrol->value.iec958.status[1] =IEC958_AES1_CON_ORIGINAL |
IEC958_AES1_CON_DIGDIGCONV_ID;
5) What additional kcontrol and routine are needed for SPDIF IN ?
-------------------------------------------------------
SF email is sponsored by - The IT Product Guide
Read honest & candid reviews on hundreds of IT Products from real users.
Discover which products truly live up to the hype. Start reading now.
http://ads.osdn.com/?ad_id=6595&alloc_id=14396&op=click
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: au88x0 - Replace spdif frequency control by IEC958 control
2005-02-23 2:19 au88x0 - Replace spdif frequency control by IEC958 control Raymond
@ 2005-02-23 11:09 ` Takashi Iwai
0 siblings, 0 replies; 4+ messages in thread
From: Takashi Iwai @ 2005-02-23 11:09 UTC (permalink / raw)
To: Raymond; +Cc: openvortex-dev, alsa-devel
At Wed, 23 Feb 2005 10:19:58 +0800,
Raymond wrote:
>
> >> 1) What is the difference between Consumer mode and Professional mode ?
>
> > A different set of status bits. See, for example, ALSA"s asoundef.h,
> > but it doesn"t have many explanations.
> >
> > The main difference is that only consumer mode has the copyright bit
> > so that devices can automatically disable copying.
>
>
> The parameter 'spdif_mode' in the routine
> vortex_spdif_init(vortex,spdif_sr,spdif_mode) in au88x0_core.c seems to
> control AC3 passthrough.
>
> However the two memory mapped I/O VORTEX_SPDIF_CFG0 and
> VORTEX_SPDIF_CFG1 seem to be write-only, return zero when read.
Then we need to cache the values.
> The value of memory mapped I/O VORTEX_SPDIF_FLAGS are changing between
> 00138014 and 00138015
>
> 1) Which bit in the IEC958 control is related to AC3 passthrough ?
Every bits hardware can provide :)
The most important one for AC3 is the non-audio bit.
> As vortex_spdif_init() only handle changing SPDIF sample rate.
>
> 2) Do the driver need to initialise vortex->spdif_sr to 48000 or just
> let alsactl restore the value from /etc/asound.state ?
The driver must initialize the value by itself at first.
> 3) Is it correct to return the following value in
> snd_vortex_spdif_mask_get() ?
> ucontrol->value.iec958.status[3] = IEC958_AES3_CON_FS;
Yes.
> 4) Is it correct to return the following value in
> snd_vortex_spdif_default_get() ?
> ucontrol->value.iec958.status[1] =IEC958_AES1_CON_ORIGINAL |
> IEC958_AES1_CON_DIGDIGCONV_ID;
If the values are not variable, you don't need to return them.
> 5) What additional kcontrol and routine are needed for SPDIF IN ?
For the SPDIF input status bits, no "standard" control is defined
yet. You can create a control like "IEC958 Capture Status" returning
the current IEC958 status bits of the capture stream.
Also, "IEC958 Capture Switch" can be implemented (if possible). This
switch is turned on automatically in iec958 PCM definition in the
alsa-lib config file.
Takashi
-------------------------------------------------------
SF email is sponsored by - The IT Product Guide
Read honest & candid reviews on hundreds of IT Products from real users.
Discover which products truly live up to the hype. Start reading now.
http://ads.osdn.com/?ad_id=6595&alloc_id=14396&op=click
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: au88x0 - Replace spdif frequency control by IEC958 control
@ 2005-03-01 13:27 Raymond
0 siblings, 0 replies; 4+ messages in thread
From: Raymond @ 2005-03-01 13:27 UTC (permalink / raw)
To: alsa-devel; +Cc: openvortex-dev
>> The parameter 'spdif_mode' in the routine
>> vortex_spdif_init(vortex,spdif_sr,spdif_mode) in au88x0_core.c seems
>> to control AC3 passthrough.
>>
>> However the two memory mapped I/O VORTEX_SPDIF_CFG0 and
>> VORTEX_SPDIF_CFG1 seem to be write-only, return zero when read.
>Then we need to cache the values.
Define snd_aes_iec958_t spdif_out in struct snd_vortex in au88x0.h
>> 1) Which bit in the IEC958 control is related to AC3 passthrough ?
>
> Every bits hardware can provide :)
>
> The most important one for AC3 is the non-audio bit.
1) Is is possible to find out more information from the specification of
the spdif chips used ?
cs8412 and cs8402a
http://www.dearhoney.idv.tw/SoundCard/Vortex2/montegoiiplus.htm
Diamond MX300 and MX25
http://www.dearhoney.idv.tw/MUSEUM/soundcard-12.php
Aureal sound cards - SQ2500 (Coaxial) and SuperQuad PCI (optical)
http://www.dearhoney.idv.tw/MUSEUM/soundcard-07.php
static int snd_vortex_spdif_default_put(snd_kcontrol_t * kcontrol,
snd_ctl_elem_value_t * ucontrol)
{
vortex_t *vortex = snd_kcontrol_chip(kcontrol);
vortex->spdif_out.status[0]=ucontrol->value.iec958.status[0];
vortex->spdif_out.status[1]=ucontrol->value.iec958.status[1];
vortex->spdif_out.status[2]=ucontrol->value.iec958.status[2];
vortex->spdif_out.status[3]=ucontrol->value.iec958.status[3];
switch(vortex->spdif_out.status[3] & IEC958_AES3_CON_FS){
case IEC958_AES3_CON_FS_32000: vortex->spdif_sr = 32000; break;
case IEC958_AES3_CON_FS_44100: vortex->spdif_sr = 44100; break;
case IEC958_AES3_CON_FS_48000: vortex->spdif_sr = 48000; break;
};
vortex_program_spdif(vortex);
return 0;
}
>
> > As vortex_spdif_init() only handle changing SPDIF sample rate.
> >
> > 2) Do the driver need to initialise vortex->spdif_sr to 48000 or just
> > let alsactl restore the value from /etc/asound.state ?
>
> The driver must initialize the value by itself at first.
- vortex_spdif_init(vortex, 48000, 1);
+ vortex->spdif_out.status[0]=0;
+ vortex->spdif_out.status[1]=0;
+ vortex->spdif_out.status[2]=0;
+ vortex->spdif_out.status[3]=IEC958_AES3_CON_FS_48000;
+ vortex->spdif_sr=48000;
+ vortex_setup_spdif_out(vortex);
>
> > 3) Is it correct to return the following value in
> > snd_vortex_spdif_mask_get() ?
> > ucontrol->value.iec958.status[3] = IEC958_AES3_CON_FS;
>
> Yes.
static int snd_vortex_spdif_mask_get(snd_kcontrol_t * kcontrol,
snd_ctl_elem_value_t * ucontrol)
{
ucontrol->value.iec958.status[0] = 0xfd;
ucontrol->value.iec958.status[1] = 0xff;
ucontrol->value.iec958.status[2] = 0xff;
ucontrol->value.iec958.status[3] = IEC958_AES3_CON_FS;
return 0;
}
2) Do the code "ucontrol->value.iec958.status[0] = 0xfd;" in
snd_vortex_spdif_mask_get() indicate that it support consumer mode only ?
or the driver need to return error when
(ucontrol->value.iec958.status[0] & IEC958_AES0_PROFESSIONAL ) is true
in snd_vortex_spdif_default_put() ?
>
> > 4) Is it correct to return the following value in
> > snd_vortex_spdif_default_get() ?
> > ucontrol->value.iec958.status[1] =IEC958_AES1_CON_ORIGINAL |
> > IEC958_AES1_CON_DIGDIGCONV_ID;
>
> If the values are not variable, you don't need to return them.
static int snd_vortex_spdif_default_get(snd_kcontrol_t * kcontrol,
snd_ctl_elem_value_t * ucontrol)
{
vortex_t *vortex = snd_kcontrol_chip(kcontrol);
ucontrol->value.iec958.status[0] = vortex->spdif_out.status[0];
ucontrol->value.iec958.status[1] = vortex->spdif_out.status[1];
ucontrol->value.iec958.status[2] = vortex->spdif_out.status[2];
ucontrol->value.iec958.status[3] = vortex->spdif_out.status[3];
}
static void vortex_setup_spdif_out(vortex_t * vortex)
{
int i;
u32 spdif_sr;
/* CAsp4Spdif::InitializeSpdifHardware(void) */
hwwrite(vortex->mmio, VORTEX_SPDIF_FLAGS,
hwread(vortex->mmio, VORTEX_SPDIF_FLAGS) & 0xfff3fffd);
//for (i=0x291D4; i<0x29200; i+=4)
for (i = 0; i < 11; i++)
hwwrite(vortex->mmio, VORTEX_SPDIF_CFG1 + (i << 2), 0);
//hwwrite(vortex->mmio, 0x29190, hwread(vortex->mmio, 0x29190) | 0xc0000);
hwwrite(vortex->mmio, VORTEX_CODEC_EN,
hwread(vortex->mmio, VORTEX_CODEC_EN) | EN_SPDIF);
vortex->spdif_out.status[0] &= (~IEC958_AES0_PRO_FS);
vortex->spdif_out.status[0] &= (~IEC958_AES0_PROFESSIONAL);
vortex->spdif_out.status[3] &= (~IEC958_AES3_CON_FS);
/* FIXME - AC3 passthrough */
if ( vortex->spdif_out.status[0] & IEC958_AES0_NONAUDIO ) {
vortex->spdif_sr=48000;
vortex->spdif_out.status[3] |= IEC958_AES3_CON_FS_48000;
};
switch (vortex->spdif_sr) {
case 32000:
vortex->spdif_out.status[0] &= (~IEC958_AES0_NONAUDIO);
vortex->spdif_out.status[3] |= IEC958_AES3_CON_FS_32000;
spdif_sr=0x7D8D;
break;
case 44100:
vortex->spdif_out.status[0] &= (~IEC958_AES0_NONAUDIO);
vortex->spdif_out.status[3] |= IEC958_AES3_CON_FS_44100;
spdif_sr=0xACCC;
break;
case 48000:
vortex->spdif_out.status[3] |= IEC958_AES3_CON_FS_48000;
spdif_sr=0xBB8E;
break;
}
hwwrite(vortex->mmio, VORTEX_SPDIF_CFG0, vortex->spdif_out.status[1]
*256 +vortex->spdif_out.status[0]);
hwwrite(vortex->mmio, VORTEX_SPDIF_CFG1, vortex->spdif_out.status[3]
*256 +vortex->spdif_out.status[2]);
hwwrite(vortex->mmio, VORTEX_SPDIF_SMPRATE, spdif_sr);
}
http://lists.gnu.org/archive/html/openvortex-dev/2003-11/msg00008.html
3) Do we need to change the ADB routing when using AC3 passthrough ?
>
> > 5) What additional kcontrol and routine are needed for SPDIF IN ?
>
> For the SPDIF input status bits, no "standard" control is defined
> yet. You can create a control like "IEC958 Capture Status" returning
> the current IEC958 status bits of the capture stream.
> Also, "IEC958 Capture Switch" can be implemented (if possible). This
> switch is turned on automatically in iec958 PCM definition in the
> alsa-lib config file.
http://www.turtlebeach.com/site/kb_ftp/5764040.asp
External Sync
Enable Quad Audio
4) Is "External Sync" related to clock in IEC958 control ?
5) How can STAC9721 stereo codec provide quad audio ? ( Is it through
SPDIF-I2S link ? )
-------------------------------------------------------
SF email is sponsored by - The IT Product Guide
Read honest & candid reviews on hundreds of IT Products from real users.
Discover which products truly live up to the hype. Start reading now.
http://ads.osdn.com/?ad_id=6595&alloc_id=14396&op=click
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2005-03-01 13:27 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2005-02-23 2:19 au88x0 - Replace spdif frequency control by IEC958 control Raymond
2005-02-23 11:09 ` Takashi Iwai
-- strict thread matches above, loose matches on Subject: below --
2005-03-01 13:27 Raymond
2005-02-21 7:40 Raymond
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.