* Zhao, Joe <jozhao [ at ] ciena [ dot ] com> [081103 20:12]:
> Can we define the magic number with the value greater than 0xFF? Where
> is this magic number used by linux kernel?
In most cases it is not used by the kernel. Particularly, if you write
a simple driver that does not fit into a larger hierarchy -- like a
character device driver -- the ioctl command numbers will be an opaque
integer (32bit) to the rest of the kernel.
If you write character device driver, the only numbers that are
interpreted by a 2.6.27 kernel are:
#define FIONBIO 0x5421
#define FIONCLEX 0x5450
#define FIOCLEX 0x5451
#define FIOASYNC 0x5452
#define FIOQSIZE 0x5460
so as long as you avoid the 3rd "magic" byte of 0x54 you should be fine.
Now, having said that, best practices suggest that you use the _IO,
_IOW, _IOR, and _IOWR macros. The output of those macros is a 32bit
number that contains 8bits for the type (semi-uniqe for your driver),
8bits for the number (each command in your driver is given a number),
2bits for the direction, and 14 bits for the size.
Example:
// common header shared between kernel and application...
#define FOO_MAGIC 123 // completely arbitrary
#define FOO_CMD_READ _IOR(FOO_MAGIC, 1, struct foo)
#define FOO_CMD_WRITE _IOW(FOO_MAGIC, 2, struct foo)
-Bart
--
WebSig: http://www.jukie.net/~bart/sig/