linsys.c
上传用户:lgb322
上传日期:2013-02-24
资源大小:30529k
文件大小:3k
源码类别:

嵌入式Linux

开发平台:

Unix_Linux

  1. /*
  2.  * Copyright (C) Eicon Technology Corporation, 2000.
  3.  *
  4.  * Eicon File Revision :    1.10  
  5.  *
  6.  * This software may be used and distributed according to the terms
  7.  * of the GNU General Public License, incorporated herein by reference.
  8.  *
  9.  */
  10. #include <linux/sched.h>
  11. #undef N_DATA
  12. #include <linux/tqueue.h>
  13. #include <linux/smp.h>
  14. struct pt_regs;
  15. #include <linux/interrupt.h>
  16. #include <linux/ioport.h>
  17. #include "sys.h"
  18. #include "divas.h"
  19. #include "adapter.h"
  20. #include "divalog.h"
  21. #include "uxio.h"
  22. int Divas4BRIInitPCI(card_t *card, dia_card_t *cfg)
  23. {
  24. /* Use UxPciConfigWrite routines to initialise PCI config space */
  25. /* wPCIcommand = 0x03;
  26. cm_write_devconfig16(CMKey, PCI_COMMAND, &wPCIcommand);
  27. wPCIcommand = 0x280;
  28. cm_write_devconfig16(CMKey, PCI_STATUS, &wPCIcommand);
  29. bPCIcommand = 0x30;
  30. cm_write_devconfig16(CMKey, PCI_STATUS, &wPCIcommand);
  31. */
  32. return 0; 
  33. }
  34. int DivasPRIInitPCI(card_t *card, dia_card_t *cfg)
  35. {
  36. /* Use UxPciConfigWrite routines to initialise PCI config space */
  37. /* wPCIcommand = 0x03;
  38. cm_write_devconfig16(CMKey, PCI_COMMAND, &wPCIcommand);
  39. wPCIcommand = 0x280;
  40. cm_write_devconfig16(CMKey, PCI_STATUS, &wPCIcommand);
  41. bPCIcommand = 0x30;
  42. cm_write_devconfig8(CMKey, PCI_LATENCY, &bPCIcommand);*/
  43. return 0;  
  44. }
  45. int DivasBRIInitPCI(card_t *card, dia_card_t *cfg)
  46. {
  47. /* Need to set these platform dependent values after patching */
  48. card->hw->reset_base = card->cfg.reset_base;
  49. card->hw->io_base = card->cfg.io_base;
  50. request_region(card->hw->reset_base,0x80,"Divas");
  51. request_region(card->hw->io_base,0x20,"Divas");
  52. /* Same as for PRI */
  53. return DivasPRIInitPCI(card, cfg);
  54. }
  55. /* ######################### Stubs of routines that are not done yet ################## */
  56. /*void DivasLogIdi(card_t *card, ENTITY *e, int request)
  57. {
  58. }
  59. */
  60. int DivasDpcSchedule(void)
  61. {
  62. static struct tq_struct DivasTask;
  63. DivasTask.routine = DivasDoDpc;
  64. DivasTask.data = (void *) 0;
  65. queue_task(&DivasTask, &tq_immediate);
  66. mark_bh(IMMEDIATE_BH);
  67. return 0;
  68. }
  69. int DivasScheduleRequestDpc(void)
  70. {
  71. static struct tq_struct DivasTask;
  72. DivasTask.routine = DivasDoRequestDpc;
  73. DivasTask.data = (void *) 0;
  74. queue_task(&DivasTask, &tq_immediate);
  75. mark_bh(IMMEDIATE_BH);
  76. return 0;
  77. }
  78. void    DivasLogAdd(void *buffer, int length)
  79. {
  80.     static
  81.     boolean_t   overflow = FALSE;
  82.     static
  83.     boolean_t   busy = FALSE;
  84.     /* make sure we're not interrupting ourselves */
  85.     if (busy)
  86.     {
  87.         printk(KERN_DEBUG "Divas: Logging interrupting self !n");
  88.         return;
  89.     }
  90.     busy = TRUE;
  91.     /* ignore call if daemon isn't running and we've reached limit */
  92.     if (DivasLogFifoFull())
  93.     {
  94.         if (!overflow)
  95.         {
  96.             printk(KERN_DEBUG "Divas: Trace buffer fulln");
  97.             overflow = TRUE;
  98.         }
  99.         busy = FALSE;
  100.         return;
  101.     }
  102. DivasLogFifoWrite(buffer, length);
  103.     busy = FALSE;
  104.     return;
  105. }
  106. /* #################################################################################### */