typedef struct oss_audioinfo { int dev; /* Audio device number */ char name[64]; int busy; /* 0, OPEN_READ, OPEN_WRITE or OPEN_READWRITE */ int pid; int caps; /* DSP_CAP_INPUT, DSP_CAP_OUTPUT */ int iformats, oformats; int magic; /* Reserved for internal use */ char cmd[64]; /* Command using the device (if known) */ int card_number; int port_number; int mixer_dev; int real_device; /* This is the right /dev/dsp# device to open */ int enabled; /* 1=enabled, 0=device not ready at this moment */ int flags; /* For internal use only - no practical meaning */ int min_rate, max_rate; /* Sample rate limits */ int min_channels, max_channels; /* Number of channels supported */ int binding; /* DSP_BIND_FRONT, etc. 0 means undefined */ int rate_source; char handle[32]; int nrates, rates[20]; /* Please read the manual before using these */ oss_longname_t song_name; /* Song name (if given) */ oss_label_t label_name; /* Device label (if given) */ int filler[195]; } oss_audioinfo; This ioctl is meant to go straight to the hardware, reporting only what's supported natively by the hardware. That rules out emulating SNDCTL_DSP_GETCAPS/GETFMTS, because they both depend on the intermediate channel interface. Mailed netchild & ariff for advice. | field | TODO | | **dev** | unit number? | | **name** | device_get_desc() | | **busy** | examine read and write channel flags for CHN_F_BUSY | | **pid** | XXX -- this depends on the channel opened; with virtual channels, multiple processes may have a single HW device | | **caps** | XXX -- need way to get to driver capabilties, formats, etc. w/o touching channel interface | | **iformats** | XXX -- same caveat as caps | | **ofortmats** | XXX -- same caveat as caps | | **cmd** | XXX -- see pid | | **card_number** | set to -1 for now (not very useful; OSS docs recommend not using this field) | | **song_name** | write SNDCTL_{GET,SET}SONG first | | **label** | write SNDCTL_{GET,SET}LABEL first | | **port_number** | | | **mixer_dev** | | | **real_device** | unit number -- corresponds to /dev/dspN | | **devnode** | cdev->si_name | | **enabled** | device_t dev->state >= DS_ATTACHED | | **min_rate, max_rate** | XXX -- same caveat as caps | | **min_channels, max_channels** | 1 = mono, 2 = stereo, etc.; XXX -- same caveat as caps | | **binding** | not officially part of OSS; see SNDCTL_DSP_BIND_CHANNEL | | **rate_source** | sample rate group? unsure. | | **handle** | constant identifier -- (ex: PCI slot number, etc.) think about this later | | **nrates, rates** | not exported by card drivers; would need to touch them all |