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

  1. /* $Id: strategy.c,v 1.2 2002/04/26 23:09:39 smilcke Exp $ */
  2.  
  3. /*
  4.  * strategy.c
  5.  * Autor:               Stefan Milcke
  6.  * Erstellt am:         07.09.2001
  7.  * Letzte Aenderung am: 13.01.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 "devown.h"
  22.  
  23. extern "C"
  24. {
  25. #include <lxapilib.h>
  26. #include <linux/types.h>
  27. #include <linux/module.h>
  28. #include <linux/kmod.h>
  29. };
  30.  
  31. extern "C" WORD32 StratIOCtl(RP __far *_rp);
  32. WORD32 StratClose(RP __far *_rp);
  33. WORD32 StratRemove(RP __far *_rp);
  34.  
  35. WORD32 StratSkIOCtl(RP __far *_rp);
  36. WORD32 StratSkClose(RP __far *_rp);
  37.  
  38.  
  39. // SvL: Needed in StratOpen
  40. WORD32 deviceOwner = DEV_NO_OWNER; //UltiMOD, PCM, MIDI etc.
  41. WORD32 numOS2Opens = 0;
  42. // SvL: End
  43.  
  44. //--------------------------------- StratOpen ----------------------------------
  45. WORD32 StratOpen(RP __far*)
  46. {
  47.  if(numOS2Opens == 0)
  48.  {
  49.   OS2_v4lx_close_all_opened_devices();
  50.   deviceOwner = DEV_PDD_OWNER;
  51.  }
  52.  numOS2Opens++;
  53.  return RPDONE;
  54. }
  55.  
  56. //--------------------------------- StratWrite ---------------------------------
  57. #pragma off (unreferenced)
  58. static WORD32 StratWrite(RP __far* _rp)
  59. #pragma on (unreferenced)
  60. {
  61.   return RPDONE | RPERR;
  62. }
  63.  
  64. extern WORD32 DiscardableInit(RPInit __far*);
  65.  
  66. //--------------------------------- StratInit ----------------------------------
  67. WORD32 StratInit(RP __far* _rp)
  68. {
  69.   RPInit __far* rp = (RPInit __far*)_rp;
  70.   return DiscardableInit(rp);
  71. }
  72.  
  73.  
  74. //----------------------------- StratInitComplete ------------------------------
  75. #pragma off (unreferenced)
  76. WORD32 StratInitComplete(RP __far* _rp)
  77. #pragma on (unreferenced)
  78. {
  79.   return(RPDONE);
  80. }
  81.  
  82. //--------------------------------- StratError ---------------------------------
  83. static WORD32 StratError(RP __far*)
  84. {
  85.   return RPERR_COMMAND | RPDONE;
  86. }
  87.  
  88. //------------------------------- StratDeinstall -------------------------------
  89. #pragma off (unreferenced)
  90. static WORD32 StratDeinstall(RP __far* rp)
  91. #pragma on (unreferenced)
  92. {
  93.  release_module("tda9875");
  94.  release_module("tda7432");
  95.  release_module("msp3400");
  96.  release_module("tuner");
  97.  release_module("tvaudio");
  98.  release_module("bttv");
  99.  return RPDONE;
  100. }
  101.  
  102. //------------------------------- StratShutdown --------------------------------
  103. static WORD32 StratShutdown(RP __far* _rp)
  104. {
  105.  RPShutdown __far *rp=(RPShutdown __far *)_rp;
  106.  if(rp->Function==0)
  107.  {
  108.   release_module("tda9875");
  109.   release_module("tda7432");
  110.   release_module("msp3400");
  111.   release_module("tuner");
  112.   release_module("tvaudio");
  113.   release_module("bttv");
  114.  }
  115.  return RPDONE;
  116. }
  117.  
  118. // Strategy dispatch table
  119. //
  120. // This table is used by the strategy routine to dispatch strategy requests
  121.  
  122. typedef WORD32 (*RPHandler)(RP __far* rp);
  123. RPHandler StratDispatch[] =
  124. {
  125.   StratInit,                  // 00 (BC): Initialization
  126.   StratError,                 // 01 (B ): Media check
  127.   StratError,                 // 02 (B ): Build BIOS parameter block
  128.   StratError,                 // 03 (  ): Unused
  129.   StratError,                 // 04 (BC): Read
  130.   StratError,                 // 05 ( C): Nondestructive read with no wait
  131.   StratError,                 // 06 ( C): Input status
  132.   StratError,                 // 07 ( C): Input flush
  133.   StratWrite,                 // 08 (BC): Write
  134.   StratError,                 // 09 (BC): Write verify
  135.   StratError,                 // 0A ( C): Output status
  136.   StratError,                 // 0B ( C): Output flush
  137.   StratError,                 // 0C (  ): Unused
  138.   StratOpen,                  // 0D (BC): Open
  139.   StratClose,                 // 0E (BC): Close
  140.   StratError,                 // 0F (B ): Removable media check
  141.   StratIOCtl,                 // 10 (BC): IO Control
  142.   StratError,                 // 11 (B ): Reset media
  143.   StratError,                 // 12 (B ): Get logical unit
  144.   StratError,                 // 13 (B ): Set logical unit
  145.   StratDeinstall,             // 14 ( C): Deinstall character device driver
  146.   StratError,                 // 15 (  ): Unused
  147.   StratError,                 // 16 (B ): Count partitionable fixed disks
  148.   StratError,                 // 17 (B ): Get logical unit mapping of fixed disk
  149.   StratError,                 // 18 (  ): Unused
  150.   StratError,                 // 19 (  ): Unused
  151.   StratError,                 // 1A (  ): Unused
  152.   StratError,                 // 1B (  ): Unused
  153.   StratShutdown,              // 1C (BC): Notify start or end of system shutdown
  154.   StratError,                 // 1D (B ): Get driver capabilities
  155.   StratError,                 // 1E (  ): Unused
  156.   StratInitComplete           // 1F (BC): Notify end of initialization
  157. };
  158.  
  159. //---------------------------------- Strategy ----------------------------------
  160. WORD32 __far Strategy(RP __far* rp);
  161. #pragma aux (STRATEGY) Strategy "STRATEGY_ENTRY";
  162. WORD32 __far Strategy(RP __far* rp)
  163. {
  164.   if (rp->Command < sizeof(StratDispatch)/sizeof(StratDispatch[0]))
  165.            return(StratDispatch[rp->Command](rp));
  166.   else    return(RPERR_COMMAND | RPDONE);
  167. }
  168.  
  169.  
  170.  
  171.