home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / lxapi32.zip / Dev32 / lxioctl.c < prev    next >
C/C++ Source or Header  |  2002-04-26  |  5KB  |  204 lines

  1. /* $Id: lxioctl.c,v 1.2 2002/04/26 23:08:56 smilcke Exp $ */
  2.  
  3. /*
  4.  * ioctl.c
  5.  * Autor:               Stefan Milcke
  6.  * Erstellt am:         12.11.2001
  7.  * Letzte Aenderung am: 27.04.2002
  8.  *
  9. */
  10.  
  11. extern "C"
  12. {
  13. #define INCL_NOPMAPI
  14. #define INCL_DOSINFOSEG
  15. #include <os2.h>
  16. }
  17.  
  18. #include <devhelp.h>
  19. #include <devtype.h>
  20. #include <devrp.h>
  21. #include "lxdevown.h"
  22. #include <ldefos2.h>
  23. #include <lxapioctl.h>
  24. #include "Ver_32.h"
  25. #include <string.h>
  26.  
  27. #include <lxapios2.h>
  28.  
  29. extern "C"
  30. {
  31. #include <linux/types.h>
  32. #include <lxapilib.h>
  33. };
  34.  
  35. extern "C" ULONG ioctl_v4lx(RPIOCtl __far* rp);
  36. extern "C" int total_modules;
  37. extern "C" int request_module(char *modName);
  38. extern "C" int release_module(char *modName);
  39. extern "C" int set_module_parm(char *parm);
  40. extern "C" void *malloc(unsigned long size);
  41. extern "C" void free(void *ptr);
  42.  
  43. char vendor[]="Stefan Milcke";
  44.  
  45. //-------------------------------- ioctl_global --------------------------------
  46. extern "C" ULONG ioctl_global(RPIOCtl __far *rp)
  47. {
  48.  ULONG rc=0;
  49.  switch(rp->Function)
  50.  {
  51.   case LXIOCFN_GLO_GETDRIVERINFO:
  52.    {
  53.     DATAPACKET(dp,PLXIOCDP_GLO_GETDRIVERINFO,rp,VERIFY_READWRITE);
  54.     if(dp)
  55.     {
  56.      dp->ulVersionMajor=LX32_DRV_MAJOR_VERSION;
  57.      dp->ulVersionMinor=LX32_DRV_MINOR_VERSION;
  58.      dp->ulBuildLevel=BUILD_LEVEL;
  59.      strcpy(dp->vendor,vendor);
  60.      dp->ulNumModules=OS2_get_total_num_modules();
  61.      dp->ulV4LXNumDevices=OS2_v4lx_get_num_devices();
  62.     }
  63.     else
  64.      rc=RPERR_PARAMETER;
  65.    }
  66.    break;
  67.   default:
  68.    rc=RPERR_COMMAND;
  69.    break;
  70.  }
  71.  return rc | RPDONE;
  72. }
  73.  
  74. //--------------------------------- ioctl_mod ----------------------------------
  75. extern "C" ULONG ioctl_mod(RPIOCtl __far *rp)
  76. {
  77.  ULONG rc=0;
  78.  switch(rp->Function)
  79.  {
  80.   case LXIOCFN_MOD_ENUMMODULES:
  81.    {
  82.     DATAPACKET(dp,PLXIOCDP_MOD_ENUMMODULES,rp,VERIFY_READWRITE);
  83.     if(dp)
  84.     {
  85.      PLX_MODINFO pModInfo=dp->modules;
  86.      if(pModInfo)
  87.       dp->ulNumModules=OS2_enum_modules(pModInfo,((ULONG)rp->DataLength)-sizeof(LXIOCDP_MOD_ENUMMODULES));
  88.     }
  89.    }
  90.    break;
  91.   case LXIOCFN_MOD_REQUEST_MODULE:
  92.    {
  93.     PARMPACKET(p,PLXIOCPA_MOD_REQUEST_MODULE,rp,VERIFY_READWRITE);
  94.     if(p)
  95.      p->rc=request_module(p->name);
  96.     else
  97.      rc=RPERR_PARAMETER;
  98.    }
  99.    break;
  100.   case LXIOCFN_MOD_RELEASE_MODULE:
  101.    {
  102.     PARMPACKET(p,PLXIOCPA_MOD_RELEASE_MODULE,rp,VERIFY_READWRITE);
  103.     if(p)
  104.      p->rc=release_module(p->name);
  105.     else
  106.      rc=RPERR_PARAMETER;
  107.    }
  108.    break;
  109.   case LXIOCFN_MOD_SETMODPARM:
  110.    {
  111.     PARMPACKET(p,PLXIOCPA_MOD_SETPARM,rp,VERIFY_READWRITE);
  112.     if(p)
  113.     {
  114.      int sz=rp->ParmLength;
  115.      char *mp=(char *)malloc(sz);
  116.      if(mp)
  117.      {
  118.       memset(mp,0,sz);
  119.       strcpy(mp,p->moduleName);
  120.       mp[strlen(mp)+1]=(char)0;
  121.       mp[strlen(mp)]=':';
  122.       memcpy(&(mp[strlen(mp)]),p->parameter,strlen(p->parameter));
  123.       p->rc=OS2_set_module_parm(mp);
  124.       free(mp);
  125.      }
  126.      else
  127.      {
  128.       p->rc=-12;
  129.       rc=RPERR;
  130.      }
  131.     }
  132.     else
  133.      rc=RPERR_PARAMETER;
  134.    }
  135.    break;
  136.   default:
  137.    rc=RPERR_COMMAND;
  138.    break;
  139.  }
  140.  return rc | RPDONE;
  141. }
  142.  
  143. //--------------------------------- ioctl_pci ----------------------------------
  144. extern "C" ULONG ioctl_pci(RPIOCtl __far *rp)
  145. {
  146.  ULONG rc=0;
  147.  /*
  148.  switch(rp->Function)
  149.  {
  150.   default:
  151.    rc=RPERR_COMMAND;
  152.    break;
  153.  }
  154.  */
  155.  rc=RPERR_COMMAND;
  156.  return rc | RPDONE;
  157. }
  158.  
  159. //--------------------------------- ioctl_i2c ----------------------------------
  160. extern "C" ULONG ioctl_i2c(RPIOCtl __far *rp)
  161. {
  162.  ULONG rc=0;
  163.  /*
  164.  switch(rp->Function)
  165.  {
  166.   default:
  167.    rc=RPERR_COMMAND;
  168.    break;
  169.  }
  170.  */
  171.  rc=RPERR_COMMAND;
  172.  return rc | RPDONE;
  173. }
  174.  
  175. extern "C" ULONG ioctl_v4l(RPIOCtl __far *rp);
  176.  
  177. //--------------------------------- StratIOCtl ---------------------------------
  178. extern "C" ULONG StratIOCtl(RPIOCtl __far* rp)
  179. {
  180.  switch(rp->Category)
  181.  {
  182.   case LXIOCCAT_GLO:
  183.    return ioctl_global(rp);
  184.   case LXIOCCAT_MOD:
  185.    return ioctl_mod(rp);
  186.   case LXIOCCAT_PCI:
  187.    return ioctl_pci(rp);
  188.   case LXIOCCAT_I2C:
  189.    return ioctl_i2c(rp);
  190.   case LXIOCCAT_V4L:
  191.    return ioctl_v4l(rp);
  192.  }
  193.  return RPERR_COMMAND | RPDONE;
  194. }
  195.  
  196. //-------------------------------- OS2_lxioctl ---------------------------------
  197. extern "C" unsigned long OS2_lxioctl(void __far* requestPacketPtr)
  198. {
  199.  RPIOCtl __far *rp=(RPIOCtl __far *)requestPacketPtr;
  200.  if(rp->Category >= LXIOCCAT_GLO)
  201.   return StratIOCtl(rp);
  202.  else
  203.   return RPERR_COMMAND | RPDONE;
  204. }