kernelioctl.pp 4.1 KB

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