MCPcopy Create free account
hub / github.com/danoon2/Boxedwine / ioctl

Method ioctl

source/kernel/devs/devmixer.cpp:38–117  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

36}
37
38U32 DevMixer::ioctl(KThread* thread, U32 request) {
39 U32 len = (request >> 16) & 0x3FFF;
40 CPU* cpu = thread->cpu;
41 KMemory* memory = thread->memory;
42 //bool read = (request & 0x40000000) != 0;
43 bool write = (request & 0x80000000) != 0;
44
45 switch (request & 0xFFFF) {
46 case 0x5801: // SNDCTL_SYSINFO
47 if (write) {
48 U32 p = IOCTL_ARG1;
49 for (U32 i=0;i<len/4;i++)
50 memory->writed(p+i*4, 2000+i);
51 memory->strcpy(p, "OSS/Linux"); p+=32; // char product[32]; /* For example OSS/Free, OSS/Linux or OSS/Solaris */
52 memory->strcpy(p, "4.0.0a"); p+=32; // char version[32]; /* For example 4.0a */
53 memory->writed(p, 0x040000); p+=4; // int versionnum; /* See OSS_GETVERSION */
54
55 for (U32 i=0;i<128;i++) {
56 memory->writeb(p, i+100); p+=1; // char options[128]; /* Reserved */
57 }
58
59 memory->writed(p, 1); p+=4; // offset 196 int numaudios; /* # of audio/dsp devices */
60 for (U32 i=0;i<8;i++) {
61 memory->writed(p, 200+i); p+=4; // int openedaudio[8]; /* Bit mask telling which audio devices are busy */
62 }
63
64 memory->writed(p, 1); p+=4; // int numsynths; /* # of availavle synth devices */
65 memory->writed(p, 1); p+=4; // int nummidis; /* # of available MIDI ports */
66 memory->writed(p, 1); p+=4; // int numtimers; /* # of available timer devices */
67 memory->writed(p, 1); p+=4; // offset 244 int nummixers; /* # of mixer devices */
68
69 for (U32 i=0;i<8;i++) {
70 memory->writed(p, 0); p+=4; // int openedmidi[8]; /* Bit mask telling which midi devices are busy */
71 }
72 memory->writed(p, 1); p+=4; // offset 280 int numcards; /* Number of sound cards in the system */
73 memory->writed(p, 1); p+=4; // offset 284 int numaudioengines; /* Number of audio engines in the system */
74 memory->strcpy(p, "GPL"); // char license[16]; /* For example "GPL" or "CDDL" */
75 return 0;
76 }
77 break;
78 case 0x5807: // SNDCTL_AUDIOINFO
79 if (write) {
80 U32 p = IOCTL_ARG1;
81 p+=4; // int dev; /* Audio device number */
82 memory->strcpy(p, "BoxedWine mixer"); p+=64; // oss_devname_t name;
83 memory->writed(p, 0); p+=4; // int busy; /* 0, OPEN_READ, OPEN_WRITE or OPEN_READWRITE */
84 memory->writed(p, -1); p+=4; // int pid;
85 memory->writed(p, PCM_CAP_OUTPUT); p+=4; // int caps; /* PCM_CAP_INPUT, PCM_CAP_OUTPUT */
86 memory->writed(p, 0); p+=4; // int iformats
87 memory->writed(p, AFMT_U8 | AFMT_S16_LE | AFMT_S16_BE | AFMT_S8 | AFMT_U16_BE); p+=4; // int oformats;
88 memory->writed(p, 0); p+=4; // int magic; /* Reserved for internal use */
89 memory->strcpy(p, ""); p+=64; // oss_cmd_t cmd; /* Command using the device (if known) */
90 memory->writed(p, 0); p+=4; // int card_number;
91 memory->writed(p, 0); p+=4; // int port_number;
92 memory->writed(p, 0); p+=4; // int mixer_dev;
93 memory->writed(p, 0); p+=4; // int legacy_device; /* Obsolete field. Replaced by devnode */
94 memory->writed(p, 1); p+=4; // int enabled; /* 1=enabled, 0=device not ready at this moment */
95 memory->writed(p, 0); p+=4; // int flags; /* For internal use only - no practical meaning */

Callers

nothing calls this directly

Calls 3

strcpyMethod · 0.80
writedMethod · 0.45
writebMethod · 0.45

Tested by

no test coverage detected