wbflush.c
上传用户:jlfgdled
上传日期:2013-04-10
资源大小:33168k
文件大小:2k
源码类别:

Linux/Unix编程

开发平台:

Unix_Linux

  1. /*
  2.  * Setup the right wbflush routine for the different DECstations.
  3.  *
  4.  * Created with information from:
  5.  *      DECstation 3100 Desktop Workstation Functional Specification
  6.  *      DECstation 5000/200 KN02 System Module Functional Specification
  7.  *      mipsel-linux-objdump --disassemble vmunix | grep "wbflush" :-)
  8.  *
  9.  * This file is subject to the terms and conditions of the GNU General Public
  10.  * License.  See the file "COPYING" in the main directory of this archive
  11.  * for more details.
  12.  *
  13.  * Copyright (C) 1998 Harald Koerfgen
  14.  * Copyright (C) 2002 Maciej W. Rozycki
  15.  */
  16. #include <linux/init.h>
  17. #include <asm/bootinfo.h>
  18. #include <asm/system.h>
  19. #include <asm/wbflush.h>
  20. static void wbflush_kn01(void);
  21. static void wbflush_kn210(void);
  22. static void wbflush_mips(void);
  23. void (*__wbflush) (void);
  24. void __init wbflush_setup(void)
  25. {
  26. switch (mips_machtype) {
  27. case MACH_DS23100:
  28. case MACH_DS5000_200: /* DS5000 3max */
  29. __wbflush = wbflush_kn01;
  30. break;
  31. case MACH_DS5100: /* DS5100 MIPSMATE */
  32. __wbflush = wbflush_kn210;
  33. break;
  34. case MACH_DS5000_1XX: /* DS5000/100 3min */
  35. case MACH_DS5000_XX: /* Personal DS5000/2x */
  36. case MACH_DS5000_2X0: /* DS5000/240 3max+ */
  37. default:
  38. __wbflush = wbflush_mips;
  39. break;
  40. }
  41. }
  42. /*
  43.  * For the DS3100 and DS5000/200 the R2020/R3220 writeback buffer functions
  44.  * as part of Coprocessor 0.
  45.  */
  46. static void wbflush_kn01(void)
  47. {
  48.     asm(".settpushnt"
  49. ".settnoreordernt"
  50. "1:tbc0ft1bnt"
  51. "nopnt"
  52. ".settpop");
  53. }
  54. /*
  55.  * For the DS5100 the writeback buffer seems to be a part of Coprocessor 3.
  56.  * But CP3 has to enabled first.
  57.  */
  58. static void wbflush_kn210(void)
  59. {
  60.     asm(".settpushnt"
  61. ".settnoreordernt"
  62. "mfc0t$2,$12nt"
  63. "luit$3,0x8000nt"
  64. "ort$3,$2,$3nt"
  65. "mtc0t$3,$12nt"
  66. "nopn"
  67. "1:tbc3ft1bnt"
  68. "nopnt"
  69. "mtc0t$2,$12nt"
  70. "nopnt"
  71. ".settpop"
  72. : : : "$2", "$3");
  73. }
  74. /*
  75.  * I/O ASIC systems use a standard writeback buffer that gets flushed
  76.  * upon an uncached read.
  77.  */
  78. static void wbflush_mips(void)
  79. {
  80. __fast_iob();
  81. }
  82. #include <linux/module.h>
  83. EXPORT_SYMBOL(__wbflush);