/packages/libc/src/kernelioctl.pp

https://github.com/slibre/freepascal · Puppet · 196 lines · 160 code · 36 blank · 0 comment · 0 complexity · 91c6a81990f8cb5d35a83310d93988c4 MD5 · raw file

  1. {$mode objfpc}
  2. {$h+}
  3. {$if not defined(linux) or not defined(cpui386)}
  4. {$error The KernelIoctl unit is a legacy Kylix-compatibility unit that is only supported on Linux/i386. It is known not to work in various ways on other OSes and architectures (including Linux/x86_64). }
  5. {$endif}
  6. Unit kernelioctl;
  7. Interface
  8. const
  9. _IOC_NRBITS = 8;
  10. _IOC_TYPEBITS = 8;
  11. _IOC_SIZEBITS = 14;
  12. _IOC_DIRBITS = 2;
  13. _IOC_NRMASK = (1 shl _IOC_NRBITS) - 1;
  14. _IOC_TYPEMASK = (1 shl _IOC_TYPEBITS) - 1;
  15. _IOC_SIZEMASK = (1 shl _IOC_SIZEBITS) - 1;
  16. _IOC_DIRMASK = (1 shl _IOC_DIRBITS) - 1;
  17. _IOC_NRSHIFT = 0;
  18. _IOC_TYPESHIFT = _IOC_NRSHIFT + _IOC_NRBITS;
  19. _IOC_SIZESHIFT = _IOC_TYPESHIFT + _IOC_TYPEBITS;
  20. _IOC_DIRSHIFT = _IOC_SIZESHIFT + _IOC_SIZEBITS;
  21. _IOC_NONE = 0;
  22. _IOC_WRITE = 1;
  23. _IOC_READ = 2;
  24. Function _IOC(dir, __type, nr, size: cardinal): cardinal;
  25. Function _IOR(_type,nr,size : cardinal) : cardinal;
  26. Function _IOW(_type,nr,size : cardinal) : cardinal;
  27. Function _IOWR(_type,nr,size : cardinal) : cardinal;
  28. Function _IOC_DIR(nr : cardinal) : cardinal;
  29. Function _IOC_TYPE(nr : cardinal) : cardinal;
  30. Function _IOC_NR(nr : cardinal) : cardinal;
  31. Function _IOC_SIZE(nr : cardinal) : cardinal;
  32. Function _IO(__type, nr: Cardinal): cardinal;
  33. const
  34. IOC_IN = _IOC_WRITE shl _IOC_DIRSHIFT;
  35. IOC_OUT = _IOC_READ shl _IOC_DIRSHIFT;
  36. IOC_INOUT = (_IOC_WRITE or _IOC_READ) shl _IOC_DIRSHIFT;
  37. IOCSIZE_MASK = _IOC_SIZEMASK shl _IOC_SIZESHIFT;
  38. IOCSIZE_SHIFT = _IOC_SIZESHIFT;
  39. const
  40. TCGETS = $5401;
  41. TCSETS = $5402;
  42. TCSETSW = $5403;
  43. TCSETSF = $5404;
  44. TCGETA = $5405;
  45. TCSETA = $5406;
  46. TCSETAW = $5407;
  47. TCSETAF = $5408;
  48. TCSBRK = $5409;
  49. TCXONC = $540A;
  50. TCFLSH = $540B;
  51. TIOCEXCL = $540C;
  52. TIOCNXCL = $540D;
  53. TIOCSCTTY = $540E;
  54. TIOCGPGRP = $540F;
  55. TIOCSPGRP = $5410;
  56. TIOCOUTQ = $5411;
  57. TIOCSTI = $5412;
  58. TIOCGWINSZ = $5413;
  59. TIOCSWINSZ = $5414;
  60. TIOCMGET = $5415;
  61. TIOCMBIS = $5416;
  62. TIOCMBIC = $5417;
  63. TIOCMSET = $5418;
  64. TIOCGSOFTCAR = $5419;
  65. TIOCSSOFTCAR = $541A;
  66. FIONREAD = $541B;
  67. TIOCINQ = FIONREAD;
  68. TIOCLINUX = $541C;
  69. TIOCCONS = $541D;
  70. TIOCGSERIAL = $541E;
  71. TIOCSSERIAL = $541F;
  72. TIOCPKT = $5420;
  73. FIONBIO = $5421;
  74. TIOCNOTTY = $5422;
  75. TIOCSETD = $5423;
  76. TIOCGETD = $5424;
  77. TCSBRKP = $5425;
  78. TIOCTTYGSTRUCT = $5426;
  79. TIOCSBRK = $5427;
  80. TIOCCBRK = $5428;
  81. TIOCGSID = $5429;
  82. Function TIOCGPTN : Cardinal;
  83. Function TIOCSPTLCK : Cardinal;
  84. Function TIOCGDEV : Cardinal;
  85. const
  86. FIONCLEX = $5450;
  87. FIOCLEX = $5451;
  88. FIOASYNC = $5452;
  89. TIOCSERCONFIG = $5453;
  90. TIOCSERGWILD = $5454;
  91. TIOCSERSWILD = $5455;
  92. TIOCGLCKTRMIOS = $5456;
  93. TIOCSLCKTRMIOS = $5457;
  94. TIOCSERGSTRUCT = $5458;
  95. TIOCSERGETLSR = $5459;
  96. TIOCSERGETMULTI = $545A;
  97. TIOCSERSETMULTI = $545B;
  98. TIOCMIWAIT = $545C;
  99. TIOCGICOUNT = $545D;
  100. TIOCGHAYESESP = $545E;
  101. TIOCSHAYESESP = $545F;
  102. TIOCPKT_DATA = 0;
  103. TIOCPKT_FLUSHREAD = 1;
  104. TIOCPKT_FLUSHWRITE = 2;
  105. TIOCPKT_STOP = 4;
  106. TIOCPKT_START = 8;
  107. TIOCPKT_NOSTOP = 16;
  108. TIOCPKT_DOSTOP = 32;
  109. TIOCSER_TEMT = $01;
  110. Implementation
  111. Function _IOC(dir, __type, nr, size: cardinal): cardinal;
  112. begin
  113. Result:=(dir shl _IOC_DIRSHIFT) or (__type shl _IOC_TYPESHIFT) or
  114. (nr shl _IOC_NRSHIFT) or (size shl _IOC_SIZESHIFT);
  115. end;
  116. Function _IO(__type, nr: Cardinal): cardinal;
  117. begin
  118. Result := _IOC(_IOC_NONE,__type,nr,0);
  119. end;
  120. Function _IOR(_type,nr,size : cardinal) : cardinal;
  121. begin
  122. _IOR:=_IOC(_IOC_READ,_type,nr,size);
  123. end;
  124. Function _IOW(_type,nr,size : cardinal) : cardinal;
  125. begin
  126. _IOW:=_IOC(_IOC_WRITE,_type,nr,size);
  127. end;
  128. Function _IOWR(_type,nr,size : cardinal) : cardinal;
  129. begin
  130. _IOWR:=_IOC(_IOC_READ or _IOC_WRITE,_type,nr,size);
  131. end;
  132. Function _IOC_DIR(nr : cardinal) : cardinal;
  133. begin
  134. _IOC_DIR:=(nr shr _IOC_DIRSHIFT) and _IOC_DIRMASK;
  135. end;
  136. Function _IOC_TYPE(nr : cardinal) : cardinal;
  137. begin
  138. _IOC_TYPE:=(nr shr _IOC_TYPESHIFT) and _IOC_TYPEMASK;
  139. end;
  140. Function _IOC_NR(nr : cardinal) : cardinal;
  141. begin
  142. _IOC_NR:=(nr shr _IOC_NRSHIFT) and _IOC_NRMASK;
  143. end;
  144. Function _IOC_SIZE(nr : cardinal) : cardinal;
  145. begin
  146. _IOC_SIZE:=(nr shr _IOC_SIZESHIFT) and _IOC_SIZEMASK;
  147. end;
  148. Function TIOCGPTN : cardinal;
  149. begin
  150. TIOCGPTN:=_IOR(ord('T'),$30,4);
  151. end;
  152. Function TIOCSPTLCK : cardinal;
  153. begin
  154. TIOCSPTLCK:=_IOW(ord('T'),$31,4);
  155. end;
  156. Function TIOCGDEV : cardinal;
  157. begin
  158. TIOCGDEV:=_IOR(ord('T'),$32,4);
  159. end;
  160. end.