* Where's Konstantin?
@ 2004-12-22 14:47 Frank Kotler
2004-12-22 17:44 ` OSS ioctls Richard Cooper
2004-12-22 23:58 ` Where's Konstantin? Brian Raiter
0 siblings, 2 replies; 8+ messages in thread
From: Frank Kotler @ 2004-12-22 14:47 UTC (permalink / raw)
To: linux-assembly
Tried to send this to "konst linuxassembly org" but got it bounced back.
I saw a reference a while back in this list for another address for him,
but wasn't able to see it. Anyone know how to reach Konstantin... or
what the story is with asmutils?
TIA,
Frank
-----------------------------------
Hello Konstantin,
I just tried to build asmutils-0.17, and it wants me to roll back to
Nasm 0.98. No way in hell! Much too buggy! Rolled back to asmutils-0.14
instead.
What's the problem with 0.17 that Nasm won't build it? Or, put
another way, what's the problem with Nasm that it won't build 0.17
(builds 0.14 fine, so I'm inclined to think it's "not a Nasm problem"...
but I always think that :)
Sorry to have been so slow attempting to upgrade to asmutils-0.17 - hate
to see this situation continue!
Best,
Frank
fbkotler@comcast.net
nasm-devel@lists.sf.net
^ permalink raw reply [flat|nested] 8+ messages in thread
* OSS ioctls...
2004-12-22 14:47 Where's Konstantin? Frank Kotler
@ 2004-12-22 17:44 ` Richard Cooper
2004-12-22 20:40 ` Maciej Hrebien
2004-12-22 21:45 ` Maciej Hrebien
2004-12-22 23:58 ` Where's Konstantin? Brian Raiter
1 sibling, 2 replies; 8+ messages in thread
From: Richard Cooper @ 2004-12-22 17:44 UTC (permalink / raw)
To: linux-assembly
I am going to go insane... Please help...
Here's my code:
section .text
%define SNDCTL_DSP_RESET 0x5000
%define SNDCTL_DSP_SPEED 0x5002
%define SNDCTL_DSP_SETFMT 0x5005
%define SNDCTL_DSP_GETFMTS 0x500B
%define SNDCTL_DSP_CHANNELS 0x5006
%define SNDCTL_DSP_POST 0x5008
%define SNDCTL_DSP_SETFRAGMENT 0x500A
%define AFMT_S16_LE 0x0010
sys sys_open, dev_dsp, O_WRONLY; systrap "opening /dev/dsp"
mov [out_desc], eax
sys sys_ioctl, [out_desc], SNDCTL_DSP_RESET, 0; systrap
"resetting dsp"
sys sys_ioctl, [out_desc], SNDCTL_DSP_GETFMTS, formats; systrap
"getting dsp formats"
sys sys_ioctl, [out_desc], SNDCTL_DSP_CHANNELS, channels; systrap
"setting dsp channels"
sys sys_ioctl, [out_desc], SNDCTL_DSP_SPEED, speed; systrap
"setting dsp speed"
sys sys_ioctl, [out_desc], SNDCTL_DSP_SETFMT, format; systrap
"setting dsp format"
sys sys_ioctl, [out_desc], SNDCTL_DSP_SETFRAGMENT, fragment; systrap
"setting dsp fragment size"
section .data
channels dd 1
speed dd 8000
format dd AFMT_S16_LE
formats dd 0
fragment dd $00080006
ass dd 0
section .bss
out_desc resd 1
Every time I run it I get a error message like this:
Error getting dsp formats
EAX Error Code: EINVAL -- Invalid argument
EAX: FFFFFFEA EBX: 00000004 ECX: 0000500B EDX: 0804B3A0
ESI: 00000000 EDI: 00000000 EBP: 00000000 ESP: BFFFF810
EIP: 0804822E EFLAGS: 00000000 00000000 00000010 00000010
I really can't imagine what the invalid argument is. According to the
register dump right there the file descriptor is in ebx, the ioctl number
in ecx, and a memory pointer in edx, yet every ioctl except for
SNDCTL_DSP_RESET gives that same error.
If I forget the ioctls and go on, I can write to the sound device and get
sound, but I need to use them because it's not set to the right format by
default.
I've run strace on sox and I'm using the same ioctls it does, yet they
work for it and not for me. This is nuts.
The OSS documentation says not to use SNDCTL_DSP_RESET after opening.
I've tried it without it and with it (since sox does it) and it's the same
either way.
The only thing I could think might be wrong is that the ioctl numbers are
wrong, but I looked in soundcard.h and it says SNDCTL_DSP_GETFMTS is ('P',
11) which best I can figure has to be $500B.
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: OSS ioctls...
2004-12-22 17:44 ` OSS ioctls Richard Cooper
@ 2004-12-22 20:40 ` Maciej Hrebien
2004-12-22 21:20 ` Maciej Hrebien
2004-12-22 21:45 ` Maciej Hrebien
1 sibling, 1 reply; 8+ messages in thread
From: Maciej Hrebien @ 2004-12-22 20:40 UTC (permalink / raw)
To: linux-assembly
Richard Cooper wrote:
>
> I am going to go insane... Please help...
>
> Here's my code:
>
> section .text
>
> %define SNDCTL_DSP_RESET 0x5000
> %define SNDCTL_DSP_SPEED 0x5002
> %define SNDCTL_DSP_SETFMT 0x5005
> %define SNDCTL_DSP_GETFMTS 0x500B
> %define SNDCTL_DSP_CHANNELS 0x5006
> %define SNDCTL_DSP_POST 0x5008
> %define SNDCTL_DSP_SETFRAGMENT 0x500A
> %define AFMT_S16_LE 0x0010
>
> sys sys_open, dev_dsp, O_WRONLY; systrap "opening /dev/dsp"
> mov [out_desc], eax
>
> sys sys_ioctl, [out_desc], SNDCTL_DSP_RESET, 0; systrap
> "resetting dsp"
> sys sys_ioctl, [out_desc], SNDCTL_DSP_GETFMTS, formats; systrap
> "getting dsp formats"
> sys sys_ioctl, [out_desc], SNDCTL_DSP_CHANNELS, channels; systrap
> "setting dsp channels"
> sys sys_ioctl, [out_desc], SNDCTL_DSP_SPEED, speed; systrap
> "setting dsp speed"
> sys sys_ioctl, [out_desc], SNDCTL_DSP_SETFMT, format; systrap
> "setting dsp format"
> sys sys_ioctl, [out_desc], SNDCTL_DSP_SETFRAGMENT, fragment; systrap
> "setting dsp fragment size"
>
> section .data
>
> channels dd 1
> speed dd 8000
> format dd AFMT_S16_LE
> formats dd 0
> fragment dd $00080006
> ass dd 0
>
[cut]
Correct me if i'm wrong but as i remember the ioctl gets an
int (dd) as an argument - not an address. So [] is needed.
--
Maciej Hrebien
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: OSS ioctls...
2004-12-22 20:40 ` Maciej Hrebien
@ 2004-12-22 21:20 ` Maciej Hrebien
2004-12-23 0:18 ` Richard Cooper
0 siblings, 1 reply; 8+ messages in thread
From: Maciej Hrebien @ 2004-12-22 21:20 UTC (permalink / raw)
To: linux-assembly
Maciej Hrebien wrote:
>
> Richard Cooper wrote:
> >
> > I am going to go insane... Please help...
> >
> > Here's my code:
> >
> > section .text
> >
> > %define SNDCTL_DSP_RESET 0x5000
> > %define SNDCTL_DSP_SPEED 0x5002
> > %define SNDCTL_DSP_SETFMT 0x5005
> > %define SNDCTL_DSP_GETFMTS 0x500B
> > %define SNDCTL_DSP_CHANNELS 0x5006
> > %define SNDCTL_DSP_POST 0x5008
> > %define SNDCTL_DSP_SETFRAGMENT 0x500A
> > %define AFMT_S16_LE 0x0010
> >
> > sys sys_open, dev_dsp, O_WRONLY; systrap "opening /dev/dsp"
> > mov [out_desc], eax
> >
> > sys sys_ioctl, [out_desc], SNDCTL_DSP_RESET, 0; systrap
> > "resetting dsp"
> > sys sys_ioctl, [out_desc], SNDCTL_DSP_GETFMTS, formats; systrap
> > "getting dsp formats"
> > sys sys_ioctl, [out_desc], SNDCTL_DSP_CHANNELS, channels; systrap
> > "setting dsp channels"
> > sys sys_ioctl, [out_desc], SNDCTL_DSP_SPEED, speed; systrap
> > "setting dsp speed"
> > sys sys_ioctl, [out_desc], SNDCTL_DSP_SETFMT, format; systrap
> > "setting dsp format"
> > sys sys_ioctl, [out_desc], SNDCTL_DSP_SETFRAGMENT, fragment; systrap
> > "setting dsp fragment size"
> >
> > section .data
> >
> > channels dd 1
> > speed dd 8000
> > format dd AFMT_S16_LE
> > formats dd 0
> > fragment dd $00080006
> > ass dd 0
> >
>
> [cut]
>
> Correct me if i'm wrong but as i remember the ioctl gets an
> int (dd) as an argument - not an address. So [] is needed.
What am i talking about? sorry! Did you tried the
linuxassembly.org/articles/audio.html? Your code looks very similar and
%define's seems to be different.
--
Maciej Hrebien
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: OSS ioctls...
2004-12-22 17:44 ` OSS ioctls Richard Cooper
2004-12-22 20:40 ` Maciej Hrebien
@ 2004-12-22 21:45 ` Maciej Hrebien
1 sibling, 0 replies; 8+ messages in thread
From: Maciej Hrebien @ 2004-12-22 21:45 UTC (permalink / raw)
To: linux-assembly
Richard Cooper wrote:
>
> The only thing I could think might be wrong is that the ioctl numbers are
> wrong, but I looked in soundcard.h and it says SNDCTL_DSP_GETFMTS is ('P',
> 11) which best I can figure has to be $500B.
OK, i have had time to check it... SNDCTL_DSP_GETFMTS is eq to
_SIOR('P',11,int) which evaluates to:
((int)(SIOC_OUT|((sizeof(t)&SIOCPARM_MASK)<<16)|(x<<8)|y))
where x='P', y=11, t=int
Look soundcard.h for more details. Hope this helps and sorry for 3 posts
-
somethimes it happens ;)
--
Maciej Hrebien
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: Where's Konstantin?
2004-12-22 14:47 Where's Konstantin? Frank Kotler
2004-12-22 17:44 ` OSS ioctls Richard Cooper
@ 2004-12-22 23:58 ` Brian Raiter
1 sibling, 0 replies; 8+ messages in thread
From: Brian Raiter @ 2004-12-22 23:58 UTC (permalink / raw)
To: linux-assembly
> Tried to send this to "konst linuxassembly org" but got it bounced
> back. I saw a reference a while back in this list for another
> address for him, but wasn't able to see it.
The address you're referring to was <konst@ipian.kazan.ru>
b
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: OSS ioctls...
2004-12-22 21:20 ` Maciej Hrebien
@ 2004-12-23 0:18 ` Richard Cooper
2004-12-23 9:25 ` Maciej Hrebien
0 siblings, 1 reply; 8+ messages in thread
From: Richard Cooper @ 2004-12-23 0:18 UTC (permalink / raw)
To: linux-assembly
> Did you tried the linuxassembly.org/articles/audio.html? Your code looks
> very similar and %define's seems to be different.
I must have skimmed throught the list too fast, I didn't realize there was
an article. Otherwise I would have read that instead of the massive PDF
than is the OSS documentation. It's really quite nice documentation. It
just naturally doesn't define the IOCTL numbers. It's at
http://www.opensound.com/pguide/oss.pdf if anyone's interested.
But anyway, looking at the example I see there's a $C0040000 or'ed with
most of the ioctl numbers, and adding that to my numbers fixed everything
up.
Looking back at the header file I see that some of the IOCTL numbers go
through a different macro...
#define SNDCTL_DSP_SETFRAGMENT _SIOWR('P',10, int)
#define _SIOWR(x,y,t) ((int)(SIOC_INOUT|((sizeof(t)&SIOCPARM_MASK)<<16)|(x<<8)|y))
#define SIOC_INOUT (SIOC_IN|SIOC_OUT)
#define SIOC_OUT 0x20000000 /* copy out parameters */
#define SIOC_IN 0x40000000 /* copy in parameters */
Now as I see it, that should make those IOCTL numbers begin with $6004,
not $C004, but $6004 doesn't work, only $C004 works. So I still don't see
where the $C004 is coming from, but at least I know how to make it work
now.
Thanks for your help. I probably wouldn't have figured that out on my own
until next year or the year after when I happen to stumble upon the
linuxassembly article, seeing as the header file isn't even correct.
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: OSS ioctls...
2004-12-23 0:18 ` Richard Cooper
@ 2004-12-23 9:25 ` Maciej Hrebien
0 siblings, 0 replies; 8+ messages in thread
From: Maciej Hrebien @ 2004-12-23 9:25 UTC (permalink / raw)
To: linux-assembly
Richard Cooper wrote:
>
> > Did you tried the linuxassembly.org/articles/audio.html? Your code looks
> > very similar and %define's seems to be different.
>
> I must have skimmed throught the list too fast, I didn't realize there was
> an article. Otherwise I would have read that instead of the massive PDF
> than is the OSS documentation. It's really quite nice documentation. It
> just naturally doesn't define the IOCTL numbers. It's at
> http://www.opensound.com/pguide/oss.pdf if anyone's interested.
>
> But anyway, looking at the example I see there's a $C0040000 or'ed with
> most of the ioctl numbers, and adding that to my numbers fixed everything
> up.
>
> Looking back at the header file I see that some of the IOCTL numbers go
> through a different macro...
>
> #define SNDCTL_DSP_SETFRAGMENT _SIOWR('P',10, int)
> #define _SIOWR(x,y,t) ((int)(SIOC_INOUT|((sizeof(t)&SIOCPARM_MASK)<<16)|(x<<8)|y))
> #define SIOC_INOUT (SIOC_IN|SIOC_OUT)
> #define SIOC_OUT 0x20000000 /* copy out parameters */
> #define SIOC_IN 0x40000000 /* copy in parameters */
>
> Now as I see it, that should make those IOCTL numbers begin with $6004,
> not $C004, but $6004 doesn't work, only $C004 works. So I still don't see
> where the $C004 is coming from, but at least I know how to make it work
> now.
>
> Thanks for your help. I probably wouldn't have figured that out on my own
> until next year or the year after when I happen to stumble upon the
> linuxassembly article, seeing as the header file isn't even correct.
Read soundcard.h more careful. soundcard.h includes <linux/ioctl.h>
which includes <asm/ioctl.h> with defined _IOWR. So the code we are
considering is not even preprocesed. "#if defined(_IOWR)..." from
soundcard.h does "#define _SIOWR _IOWR". _IOWR from <asm/ioctl.h>
takes three arguments with first one named 'type' and 'dir' eq
_IOC_READ|_IOC_WRITE when going to _IOC(dir,type,nr,size). As
_IOC_READ|_IOC_WRITE is numericaly eq 3 and 'dir' from _IOC is
shifted left 30 times (_IOC_DIRSHIFT) so you have 0xc in the MSB.
Hope this helps :)
--
Maciej Hrebien
^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2004-12-23 9:25 UTC | newest]
Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2004-12-22 14:47 Where's Konstantin? Frank Kotler
2004-12-22 17:44 ` OSS ioctls Richard Cooper
2004-12-22 20:40 ` Maciej Hrebien
2004-12-22 21:20 ` Maciej Hrebien
2004-12-23 0:18 ` Richard Cooper
2004-12-23 9:25 ` Maciej Hrebien
2004-12-22 21:45 ` Maciej Hrebien
2004-12-22 23:58 ` Where's Konstantin? Brian Raiter
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).