Page 1 of 1 [ 4 posts ] 

15 Nov 2012, 12:31 pm

So the <sys/ioccom.h> header package contains low level I/O functions. I downloaded and compiled it as I am trying to write an implement some low(er) level network socket subfunctions that actually write data frames to the ethernet adapter. I am not writing an actual driver as one is already installed and those are device specific. You can have a look at it Here as it's open source Unix code.

It defines 2 constants which serve as parameters to the general IOC(input/ouput/control) function macro:

#define IOC_OUT 0x40000000 /* copy out parameters */
#define IOC_IN 0x80000000 /* copy in parameters */

The IOC function(s):

#define _IOC(inout,group,num,len) ((unsigned long) \ ((inout) | (((len) & IOCPARM_MASK) << 16) | ((group) << 8 ) | (num)))
#define _IOR(g,n,t) _IOC(IOC_OUT, (g), (n), sizeof(t))
#define _IOW(g,n,t) _IOC(IOC_IN, (g), (n), sizeof(t))




So my question is are these defined hex parameters interrupt codes? Or memory addresses? If the latter I am eager seeking how to incorporate interrupt codes into low level function macros.



Trencher93
Velociraptor
Velociraptor

User avatar

Joined: 23 Jun 2008
Age: 124
Gender: Male
Posts: 464

15 Nov 2012, 2:27 pm

Wouldn't the documentation for whatever this is tell you what the parameters are? Or a forum with people who actually use this library? The probability of finding a user of this library on this site seems low.



Ancalagon
Veteran
Veteran

User avatar

Joined: 25 Dec 2007
Age: 45
Gender: Male
Posts: 2,302

15 Nov 2012, 7:11 pm

Those are bitmasks. They're being put in the inout parameter and then binary or'ed with a bunch of other stuff. They set a particular bit in the output, which marks whether we're doing a 'copy out' or a 'copy in', whatever those are. You should definitely look up bitwise operators if you're going to do much low level C stuff.


_________________
"A dead thing can go with the stream, but only a living thing can go against it." --G. K. Chesterton


AngelKnight
Veteran
Veteran

User avatar

Joined: 3 May 2011
Age: 47
Gender: Male
Posts: 749
Location: This is not my home; I'm just passing through

16 Nov 2012, 12:47 am

AspieRogue wrote:
So the <sys/ioccom.h> header package contains low level I/O functions. I downloaded and compiled it as I am trying to write an implement some low(er) level network socket subfunctions that actually write data frames to the ethernet adapter. I am not writing an actual driver as one is already installed and those are device specific. You can have a look at it Here as it's open source Unix code.


I'm guessing you're going to actually run this stuff within a BSD of some description? If so, why not use the provided interfaces, why try to bitbang the registers on a device by hand while running within BSD?